一.反射:
反射是一种能力,在程序运行状态中动态获取类信息及调用对象方法的功能为反射
1.对任意一个类,都能动态的获取到这个类的属性和方法
2.对任意一个对象,都能动态的调用它的任意属性和方法
二.Class
Class代表的是所有字节码对象(比如Person.class,Object.class)的抽象,它是一个类(所有的类都继承自Object)
三.类的组成部分有哪些
1.属性(共有+私有)
2.方法
3.构造方法
4.接口
5.注解
四.应用
许多框架背后的实现都采用了反射的机制
比如@Autowired
注解的解析程序,来扫描当前包下面有哪些属性加了这个注解,一旦有这个注解,就要去IOC容器里获取对应的类型的实现,然后给属性赋值
五.代码示例
类
public class Student {
String name;
private String privateHello(){
return "privateHello";
}
public String publicHello(){
return "publicHello";
}
public Student(String name) {
this.name = name;
}
}
反射类
public class Reflection {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
Class<?> clazz = Class.forName("main.reflect.Student");
System.out.println(clazz);
//获取某个属性
Field nameField = clazz.getField("name");
System.out.println(nameField);
//获取对应私有方法
Method privateHello = clazz.getDeclaredMethod("privateHello");
System.out.println(privateHello);
//获取对应公有方法
Method publicHello = clazz.getMethod("publicHello");
System.out.println(publicHello);
//获取构造函数
Constructor<?>[] constructors = clazz.getConstructors();
System.out.println(constructors);
}
}
六.最后
Class反射类有众多方法,需要的话Ctrl+左键翻源码探索未知吧
…………