目录
写在文章前:对于这些知识点,如果有错误、不准确的地方,欢迎指正!
一、概念
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:属性、成员方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象,如Constructor、Field、Method等。
二、获取Class对象的方法:
1、调用方法getClass(),该方法继承自Object类;
2、调用每个类都有的静态属性class,如Student.class;
3、使用类Class的静态方法forName(packageName);
注意:在运行期间,一个类,只有一个Class对象产生,即通过以上三种方式获取到的Class,总是相等的(==)。
三、Class对象的使用
1、构造方法:
getConstructors();//获取所有的公有的构造方法
getDeclaredConstructors();//获取公有、私有、受保护、默认的构造方法
getConstructor(Type...);//根据不同的参数类型,返回符合参数类型的、公有的构造方法;
getDeclaredConsturctor(Type...);//根据不用的参数类型,返回符合参数类型的构造方法(public、private、protected、默认)
2、成员属性
getFields();//获取所有的公有的属性
getDeclaredFields();//获取公有、私有、受保护、默认的属性
getField(Type...);//根据不同的参数类型,返回符合参数类型的、公有的属性;
getDeclaredField(Type...);//根据不用的参数类型,返回符合参数类型的属性(public、private、protected、默认)
filed.set(Obj, value);//field:属性, obj:类型值,可以通过class的构造方法去获取,value:属性值
例:
Object obj = stuClass.getConstructor().newInstance();//产生Student对象--》Student stu = new Student();
//为字段设置值
f.set(obj, "刘德华");//为Student对象中的name属性赋值--》stu.name = "刘德华"
3、成员方法:
getMethods();//获取所有的公有的成员方法
getDeclaredMethods();//获取公有、私有、受保护、默认的成员方法
getMethod(methodName, Type...);//根据方法名、不同的参数类型,返回符合参数类型的、公有的成员方法;
getDeclaredMethod(Type...);//根据方法名、不同的参数类型,返回符合参数类型的成员方法(public、private、protected、默认)
注:第一个是调用的方法名称,第二个是方法的形参类型,切记是类型。
Method m = stuClass.getMethod("show1", String.class);
//实例化一个Student对象
Object obj = stuClass.getConstructor().newInstance();
m.invoke(obj, "刘德华");//一个是要调用的对象(获取有反射),一个是实参
main方法:获取main方法时,具体类型参数为String[].class,即Method methodMain = clazz.getMethod("main", String[].class)
PS:相关参考代码可以见下面链接提供下载