java反射机制
内容来自:https://www.cnblogs.com/bojuetech/p/5896551.html
概述:
JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个方法和属性。
从对象出发,通过反射(Class类)可以取得取得类的完整信息(类名 Class类型,所在包、具有的所有方法 Method[]类型、某个方法的完整信息(包括修饰符、返回值类型、异常、参数类型)、所有属性 Field[]、某个属性的完整信息、构造器 Constructors),调用类的属性或方法
总结: 在运行过程中获得类、对象、方法的所有信息。
获取类:
Class clazz = null; //1 直接通过类名.Class的方式得到 clazz = Person.class; System.out.println("通过类名: " + clazz); //2 通过对象的getClass()方法获取,这个使用的少(一般是传的是Object,不知道是什么类型的时候才用) Object obj = new Person(); clazz = obj.getClass(); System.out.println("通过getClass(): " + clazz); //3 通过全类名获取,用的比较多,但可能抛出ClassNotFoundException异常 clazz = Class.forName("com.java.reflection.Person"); System.out.println("通过全类名获取: " + clazz);
创建对象:
Class clazz = Class.forName("com.java.reflection.Person");  
  
    //使用Class类的newInstance()方法创建类的一个对象  
    //实际调用的类的那个 无参数的构造器(这就是为什么写的类的时候,要写一个无参数的构造器,就是给反射用的)  
    //一般的,一个类若声明了带参数的构造器,也要声明一个无参数的构造器  
    Object obj = clazz.newInstance();  
    System.out.println(obj);
获取方法:
 Class clazz = Class.forName("com.java.reflection.Person");  
  
    //1、得到clazz 对应的类中有哪些方法,不能获取private方法  
    Method[] methods =clazz.getMethods();  
    System.out.print("        getMethods: ");  
    for (Method method : methods){  
        System.out.print(method.getName() + ", ");  
    }  
  
    //2、获取所有的方法(且只获取当着类声明的方法,包括private方法)  
    Method[] methods2 = clazz.getDeclaredMethods();  
    System.out.print("\ngetDeclaredMethods: ");  
    for (Method method : methods2){  
        System.out.print(method.getName() + ", ");  
    }  
  
    //3、获取指定的方法  
    Method method = clazz.getDeclaredMethod("setName",String.class);//第一个参数是方法名,后面的是方法里的参数  
    System.out.println("method : " + method);  
  
    Method method2 = clazz.getDeclaredMethod("setName",String.class ,int.class);//第一个参数是方法名,后面的是方法里的参数  
    System.out.println("method2: " + method2);  
  
    //4、执行方法!  
    Object obj = clazz.newInstance();  
    method2.invoke(obj, "test");  
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号