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");  

 

posted @ 2018-01-11 16:52  _Magical  阅读(113)  评论(0)    收藏  举报