天天看点

反射

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。

在一个类的外部,是不能通过类的实例化对象调用私有化的属性和方法。

通过反射可以调用类的私有化属性和方法。

Q:通过直接new对象和反射的方式都可以调用公共结构,开发中用哪个?

A:建议直接使用new的方式。在编译中无法确定需要new谁的对象,则使用反射的方式。

Q:反射和封装是否矛盾?

A:不矛盾。反射的特征:动态性。可以将<code>封装</code>视为一种提示,提示你需要调用私有化属性或方法时,可以调用公共的属性和方法来代替直接调用它。反射表示的是一种能力,表示能不能调用属性和方法。

类的加载过程:

程序经过<code>javac.exe</code>命令以后,会生成一个或多个字节码文件(.class结尾)。

接着我们使用<code>java.exe</code>命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此运行时类,就作为<code>CLass</code>的一个实例。

获取Class的实例