zoukankan      html  css  js  c++  java
  • 反射小结

    反射知识:

    1.Class类:

    获取一个Class类有三种方法:

    Java代码 复制代码 收藏代码
    1. //第一种获取方法,直接了当   
    2. Class clazz1 = String.class;   
    3.            
    4. //第二种获取方法,对实体类运用方法   
    5. String str = "just do it";   
    6. Class clazz2 = str.getClass();   
    7.            
    8. //第三种获取方法,直接传递一个类名,字符串形式   
    9. Class clazz3 = Class.forName("java.lang.String");  
    //第一种获取方法,直接了当
    Class clazz1 = String.class;
    		
    //第二种获取方法,对实体类运用方法
    String str = "just do it";
    Class clazz2 = str.getClass();
    		
    //第三种获取方法,直接传递一个类名,字符串形式
    Class clazz3 = Class.forName("java.lang.String");

    2.Field类:

    获取一个Filed字段类的,有四种方法:

    Java代码 复制代码 收藏代码
    1. //1-->获取所有申明的字段   
    2. Field[] fields1 = clazz1.getDeclaredFields();   
    3.            
    4. //2-->获取所有的公共类字段   
    5. Field[] fields2 = clazz1.getFields();    
    6.            
    7. //3-->获取指定字段名(所有申明的字段都可获取)   
    8. Field field1 = clazz1.getDeclaredField("value");   
    9.            
    10. //4-->获取指定公共字段名   
    11. Field field2 = clazz1.getField("CASE_INSENSITIVE_ORDER");  
    //1-->获取所有申明的字段
    Field[] fields1 = clazz1.getDeclaredFields();
    		
    //2-->获取所有的公共类字段
    Field[] fields2 = clazz1.getFields(); 
    		
    //3-->获取指定字段名(所有申明的字段都可获取)
    Field field1 = clazz1.getDeclaredField("value");
    		
    //4-->获取指定公共字段名
    Field field2 = clazz1.getField("CASE_INSENSITIVE_ORDER");

    3.Method类:同Field有四种方法:

    Java代码 复制代码 收藏代码
    1. Method[] methods1 = clazz1.getDeclaredMethods();   
    2. Method[] methods2 = clazz1.getMethods();   
    3.            
    4. Method method1 = clazz1.getDeclaredMethod("checkBounds",new Class[]{byte[].class,int.class,int.class});   
    5. Method method2 = clazz2.getMethod("hashCode");  
    Method[] methods1 = clazz1.getDeclaredMethods();
    Method[] methods2 = clazz1.getMethods();
    		
    Method method1 = clazz1.getDeclaredMethod("checkBounds",new Class[]{byte[].class,int.class,int.class});
    Method method2 = clazz2.getMethod("hashCode");

    如果方法中的无参数,则得到方法时,只需传一个方法名即可

    4.Constructor类:同上有四种方法:

    Java代码 复制代码 收藏代码
    1. Constructor[] cons1 = clazz1.getDeclaredConstructors();   
    2. Constructor[] cons2 = clazz1.getConstructors();   
    3.            
    4. Constructor con1 = clazz1.getConstructor(char[].class);   
    5. Constructor con2 = clazz1.getDeclaredConstructor(new Class[]{int.class,int.class,char[].class});  
    Constructor[] cons1 = clazz1.getDeclaredConstructors();
    Constructor[] cons2 = clazz1.getConstructors();
    		
    Constructor con1 = clazz1.getConstructor(char[].class);
    Constructor con2 = clazz1.getDeclaredConstructor(new Class[]{int.class,int.class,char[].class});

    5.由一个class得到一个类的实体

    Java代码 复制代码 收藏代码
    1. String obj  = (String) clazz1.newInstance();  
    String obj  = (String) clazz1.newInstance();

     用此种方法,类必须有默认构造函数

    6.由一个Constructor对象,得到类的实体

    Java代码 复制代码 收藏代码
    1. String str2 =  (String) con1.newInstance(new char[]{'j','u','s','t'});  
    String str2 =  (String) con1.newInstance(new char[]{'j','u','s','t'});

     7.字段类修改获取字段数据:

    Java代码 复制代码 收藏代码
    1. public Object get(Object obj);//获取一个字段上的数据   
    2.   
    3.   
    4. public void set(Object obj,Object value);//设置一个字段上的数据  
    public Object get(Object obj);//获取一个字段上的数据
    
    
    public void set(Object obj,Object value);//设置一个字段上的数据
    

    8.method方法执行:

    Java代码 复制代码 收藏代码
    1. //public Object invoke(Object obj,Object... args)//方法执行   
    2.   
    3.   
    4. String testStr = "testStr";   
    5. Method method = String.class.getMethod("charAt"new Class[]{int.class});   
    6. char ch = (char) method.invoke(testStr, 1);  
  • 相关阅读:
    Java IO(三)
    Java IO(二)
    Java IO(一)
    Java操作属性文件与国际化
    Java集合详解二
    Java集合详解一
    Spring官方文档翻译(转)
    S2SH整合
    NX二次开发-UFUN获取图纸视图最大边界和视图中心点UF_DRAW_ask_view_borders
    已知两点计算直线的向量
  • 原文地址:https://www.cnblogs.com/yxnchinahlj/p/2494833.html
Copyright © 2011-2022 走看看