Java反射机制(2)

来源:互联网 发布:万方数据库与知网比较 编辑:程序博客网 时间:2024/05/18 02:03
利用反射API,获取类的信息(类的名字,属性,方法,构造器等)
Class gettedClass=Class.forName("packgeName.className");


获取包名+类名:
gettedClass.getName()


获取类名:
gettedClass.getSimpleName()


获取属性
gettedClass.getFields() 只能是public
gettedClass.getFields("fieldName")  只能是public
gettedClass.getDeclaredFields()  所有声明的属性
gettedClass.getDeclaredFields("fieldName") 所有声明的属性


获取方法:
gettedClass.getMethod()
gettedClass.getMethod("methodName",parameterType)
gettedClass.getDeclaredMethod()
gettedClass.getDeclaredMethod("methodName",parameterType)
其中的type.class 例如 int.class


获取构造器
gettedClass.getConstructor()
gettedClass.getConstructor(parameter)
gettedClass.getDeclaredConstructor()
gettedClass.getDeclaredConstructor(parameter)


通过反射API动态操作:构造器,方法,属性
Class<Source> gettedClass=(Class<Source>)Class.forName("testReflect.Source");


动态创建对象:


//调用无参构造函数,所以在javabean中,无参构造函数是很重要的
Source source=gettedClass.newInstance();


Constructor<Source> constructor=gettedClass.getDeclaredConstructor(String.class,int.class);
Source source=constructor.newInstance("good",21);


//动态调用方法
Method method=gettedClass.getMethod("setName",String.class);
method.invoke(source,"great");


//动态修改属性
Field field=gettedClass.getDeclaredField("fieldName");
field.set(source,"good");

在操作私有的属性或方法时,可以利用该属性或方法的setAccessible(true)方法来禁用安全检查,因此可以直接操作私有的属性或方法


setAccessible
启用和禁用访问安全检查的开关,值为为true,则指示反射的对象在使用时应该取消Java语言访问检查,值为false则指示反射的对象应该实施Java语言访问检查
禁止安全检查,可以提高反射的运行速度

0 0