反射都是围绕一个类展开的 - Class
- 程序都是在内存中运行的,所以一个Java程序的运行,需要将编译好的字节码文件(.class)加载到内存中,而.class文件就对应内存中的Class类。
- 反射的概念:在程序运行时,可以获取这个对象的所有属性和方法(包括所有的构造器)。
- 获取Class的三种方式
Class c = new String().getClass();//一
Class c = new String().class;//二
Class c = Class.forName("com.cd.entity.People");//三
- 类加载过程:
– 编译:.java文件编译后得到.class文件
– 类加载:.class文件经过类加载器加载到内存
–链接:(验证,准备,解析):这一步给Class分配初步的内存空间,比如静态方法和静态变量
–初始化:这一步是对Class进行实例化成一个对象 - JDK原生的动态代理就利用了反射,获取被代理类对象的方法,继而对其进行方法增强。
- spring的bean的加载就是通过xml和反射实现的
- idea等开发工具会展示一个类的所有方法,以供选择。