JAVA反射的常用方法
java反射机制运行状态中,对于任何一个类,都可以知道这个类所有属性和方法,对于任何一个对象,都可以调用它的任何一个方法,
这种动态获取信息或者动态调用功能称之为反射机制
获取Class的四种F方法:
例子:
//获取Class—getClass方法
test ts=new test();
Class cl=ts.getClass();
System.out.println(cl);
//获取Class—Class.forName方法
try {
Class cl=Class.forName("com.entity.test");
System.out.println(cl);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取Class—类名.class方法
Class cl=test.class;
System.out.println(cl);
//获取Class—包装类.type
Class cl=Boolean.TYPE;
System.out.println(cl);
推荐getclss方法和类名直接.class方法。
1.Filde类,获取成员属性
//1.Filed类获取成员变量
//2.获取Class
Class cl=test.class;
Object obj=cl.newInstance();
//获取指定对象
Field name=cl.getDeclaredField("name");
//公有化
name.setAccessible(true);
//拿到值
System.out.println(name.get(obj));
PS:文字说明【首先先拿到Class,然后通过test类中的无参构造函数来获取对象newInstance(),然后用Class获取名为name的属性,然后破坏封装 name.setAccessible(true); 然后通过Field对象从test对象Obj中拿到name name.get(obj)】
2)获取全部属性变量
//1.Filed类获取成员变量
//2.获取Class
Class cl=test.class;
Object obj=cl.newInstance();
//获取指定对象
Field fields[]=cl.getDeclaredFields();
//循环里面的内容
for (Field field : fields) {
System.out.println(field.getName());
}
1.
获得Methods全部方法
//获取Class
Class cl=test.class;
Method me[]=cl.getDeclaredMethods();
for (Method method : me) {
System.out.println(method.getName());
}
2)获得Method某个方法,不带参数
//获取Class
Class cl=test.class;
Object obj=cl.newInstance();
//调用ccc方法
Method me=cl.getDeclaredMethod("ccc",new Class[]{});
Object re=me.invoke(obj, new Object[]{});
3)获得Method某个方法,带参数
//获取Class
Class cl=test.class;
Object obj=cl.newInstance();
//调用ccc方法
Method me=cl.getDeclaredMethod("ccc",new Class[]{String.class,int.class});
Object re=me.invoke(obj, new Object[]{"谢振坤",88});
3.构造方法,获取全部无参构造方法
//获取Class
Class cl=test.class;
Object obj=cl.newInstance();
//调用构造方法
Constructor gz[]=cl.getConstructors();
for (Constructor constructor : gz) {
System.out.println(constructor);
}
1)获取单独的构造方法,无参
Class cl=test.class;
Constructor gz=cl.getConstructor();
test t=(test) gz.newInstance();
System.out.println(t);
2)获取单独的构造方法,有参
Class cl=test.class;
Constructor gz=cl.getConstructor(String.class,int.class);
test t=(test) gz.newInstance("张三",67);
System.out.println(t);
4.反射ARR数组
//获取Class,这里定义arr的数据类型
Class cl=Class.forName("java.lang.Object");
Object arr=Array.newInstance(cl, 5);
//通过reflact包中的Array来设置名为arr,第3个值为5
![下载.jpg][1] Array.set(arr, 3, 5);
//通过reflact包中的Array来获取名为arr,第3个值
Object elem=Array.get(arr, 3);
System.out.println(elem);