java复习基础篇——反射
2018-06-27 10:02:38来源:未知 阅读 ()
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。
简单来说, 就可以把.class文件比做动物的尸体, 而反射技术就是对尸体的一种解剖.通过反射技术, 我们可以拿到该字节码文件中所有的东西, 例如成员变量, 成员方法, 构造方法, 而且还包括私有。
字节码文件的三种获取方式:
- 对象名.getCalss(); // 次方法来自于Object对象已经存在的情况下,可以使用这种方式
- 类名.class //类名.class这是一个静态的属性,只要知道类名,就可以获取
- Class.forName(“com.lfh.Student”); // 通过Class类中的静态方法,指定字符串,该字符串是类的全类名(包名+类名)
获取构造方法:
//获取字节码对象
Class clazz = Class.forName("myReflectDemo.student1");
//调用无参数构造方法
Constructor cs =clazz.getConstructor();
//System.out.println(cs);
//调用有参数构造方法
Constructor css = clazz.getConstructor(String.class,int.class);
Object obj =css.newInstance("zhangsan",15);
System.out.println(css);
System.out.println(obj);
System.out.println("---------------");
//可以直接使用clazz.newInstance(),直接调用!!!
Object obj1 = clazz.newInstance();
System.out.println(obj1);
获取成员变量:
Class clazz = Class.forName("myReflectDemo.student1");
Object obj = clazz.newInstance();
// 访问所有的成员变量 返回数组
Field[] f = clazz.getDeclaredFields();
for (int i = 0; i < f.length; i++) {
Field field = f[i];
System.out.println(field);
}
// 返回指定的私有成员变量
Field name = clazz.getDeclaredField("name");
Field age = clazz.getDeclaredField("age");
age.set(obj, 18);
System.out.println(age.get(obj));
// 私有成员变量必须设置开关 不然无法访问和修改!!!(让jvm不检查权限)
name.setAccessible(true);
// 传进来的是obj [ clazz.newInstance() ] 不是name
name.set(obj, "lisi");
System.out.println(name.get(obj));
获取成员方法:
Class clazz = Class.forName("myReflectDemo.student1");
Object obj = clazz.newInstance();
/*返回所有方法
* Method[] md =clazz.getDeclaredMethods();
for (int i = 0; i < md.length; i++) {
Method method = md[i];
System.out.println(method);
}*/
//获取无参数无返回值的方法
Method m = clazz.getDeclaredMethod("method");
m.invoke(obj);
//获取有参数无返回值的方法
Method m2 =clazz.getDeclaredMethod("method",String.class);
m2.invoke(obj, "信息");
//获取无参数有返回值的方法
Method m3 =clazz.getDeclaredMethod("getName");
System.out.println(m3.invoke(obj));
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash