定义:
是在运行状态时,
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性
这种动态获取信息以及动态调用方法的功能成为Java语言的反射机制。
举例:
其实就是讲Java中的各种成分映射成一个个的Java对象
1.定义一个实体类
public class Student {
private String name;
public void sayHi(String helloStence){
System.out.println(helloStence+" "+name);
}
private String sayHello(String tag){
return "hello "+tag;
}
}
2.测试类
2.1 获取这个类,并实例化
//获取类
Class sd=Class.forName("com.cxjd.reflect.Student");
//newInstance创建student的实例,返回的是泛型(T)要进行强制转换
Student s=(Student) sd.newInstance();
2.2获取私有方法
//getDeclaredMethod能获取公有,私有的等任何类型的方法,不能获取集成的方法以及实现的接口方法
Method getHello=sd.getDeclaredMethod("sayHello",String.class);
//强制忽视方法类型
getHello.setAccessible(true);
//执行获取的方法,通过方法名.invoke.因为返回类型是string 所以要通过object接受
Object o=getHello.invoke(s,"twinkle");
System.out.println("gethello result is "+o);
2.3 获取公有方法
//获取共有的方法
Method getHi=sd.getMethod("sayHi", String.class);
//直接调用revoke输出,返回类型void 不用类型接收
getHi.invoke(s,"welcome");
2.4获取属性信息
//获取属性名
Field name=sd.getDeclaredField("name");
name.setAccessible(true);
//对获取的属性进行赋值
name.set(s,"lina");
getHi.invoke(s,"welcome");
----------------------以上部分、
引申链接 反射深入了解