以前没能弄清java的反射机制是怎么回事,而在学习中遇到了很多这样的情况。今天在网上找了一些资料,现在记录一些学习的笔记, 首先清理一下思路:
1 反射机制的概念
2 反射的作用
3 代码示例
(1)反射机制:在java1.5以后,允许java程序在运行是调用class文件,可以调用Class对象、成员变量、成员方法、构造函数等。
(2)反射的作用:
- 获取类的Class对象
- 获取类的Fields
- 获取类的Method
- 获取类的Constructor
- 新建类的实例
(3)代码示例:(只是关键代码)
示例1:获取Class对象
// 使用.getClass()方法获取对象对应的类的四种方法 Boolean var=true; Class<?> classtype1=var.getClass(); Class<?> classtype2=Float.class; Class<?> classtype3=Class.forName("java.lang.Boolean"); Class<?> classtype4=Float.TYPE; System.out.println(classtype1); System.out.println(classtype2); System.out.println(classtype3); System.out.println(classtype4);
示例2:获取类的成员变量
Class<?> tt=Type.class; Field[]fields=tt.getFields(); for(Fieldt1:fields){ System.out.println(t1); } Field[] fields=tt.getDeclaredFields(); for(Fieldt2:fields){ System.out.println(t2); }
示例3:获取类的成员方法的代码
Class<?> t2=Type.class; Method[] methods=t2.getMethods(); for(Method xx: methods){ System.out.println(xx); }
示例4:
Class<?> newInstance=Type.class; try { Object testInstance=newInstance.newInstance(); System.out.println(testInstance); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }