反射是什么?
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
ps:我的理解,反射就是通过某种手段,获取一个类的信息。例如成员变量和方法,可以调用一个对象的属性和方法。这个类只有在运行的时候才知道是哪个类,解耦。
pps:在类的加载过程中,有三大步,五小步,三大步是加载,连接,初始化。连接包含三小步,分别是验证,准备和解析。在加载阶段的主要功能是,1.找到对应的class文件,2将其导入到方法区,3,在堆中生成一个Class对象作为方法区的入口。反射就是利用一个类对应的Class对象,来做上述事情的。
反射实战
首先根据一个类的全限定类名可以获取到这个类的Class对象。
Class clz = Class.forName("com.company.Apple");
然后可以获取到这个类的属性和方法。
获取到它的构造方法,普通方法:
Method method = clz.getMethod("setPrice", int.class);
Constructor constructors = clz.getConstructor();
如果要执行这个方法,可以使用invoke方法。
Object o = constructors.newInstance();
method.invoke(o,4);
也就是,正常对类所做的操作,都可以使用反射来实现。
反射有什么用?
最重要的方式当然是做动态代理。
下一篇文章说一下动态代理