背景:Java程序中的所有对一项都有两种类型:编译时类型和运行时类型(由于多态导致的),这可能会导致对象的编译时类型和运行时类型不一致。
反射(Reflection)是被是为动态语言的关键,反射机制允许程序再运行起家借助Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
加载完类之后,再堆内的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们称之为——反射:
Java反射机制提供的功能:
反射相关的主要API:
反射的优缺点:
面向对象中创建对象,调用指定结构(属性、方法)等功能,可以不适用反射,也可以使用反射,这两者的区别:
以前创建对象并调用方法的方式,与通过反射创建对象调用方法的方式对比的话,使用场景:
通过反射,可以调用类中的私有结构,是否与面向对象的封装性是否有冲突?
对Class类的理解
Class是反射的源头。
获取Class实例的几种方式: