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");
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
- Java 反射机制2
- [java]反射机制2
- Java反射机制(2)
- Java反射机制(2)
- JAVA-反射机制(2)
- 【反射】JAVA反射机制
- Java 的反射机制(2)
- Java反射机制(2)
- java反射机制学习2
- java的反射机制2
- Java反射机制(2)
- Java反射机制学习2
- java反射机制(2)
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- Java反射机制(2)--反射的用途举例
- linux下C语言ip有关
- Xshell
- 几种控制器跳转的效果区别
- 如何使用脚本对android手机的操作---初级篇1
- 爬虫系列之一 基础知识
- Java反射机制(2)
- flyme os 插桩红米2手机
- 关于字节对齐
- 老人带娃常说这8句话,都要注意纠正啦~
- iOS CGRectDivide布局(代码举例)
- 【暴力搜索】【莫队算法】【贪心】[Codeforces Round #340 (Div. 2) ]题解报告
- 用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2
- HDU-1864-最大报销额【01背包】
- 在tabbar上添加小红点