程序中的Class对象是一样的是只有一个Class对象那JVM是如何判断这三个Class对象其实是一个Class对象呢? JVM根据两个方面判断一是类的全称另一个是类加载器 根据上篇博客中的结果得出类的全称是相同的那类加载器是否相同呢?即使类的全称相同而使用的加载器不同那Class对象也是不同的那我们继续上篇博客中的例子看看所使用的加载器的结果如何呢?其中使用getClassLoad()方法 [java] view plaincopy /** * @author 梁焕月* 文件名TestClassjava * 时间上午 */ public class TestClass { public static void main(String[] args) { try { //测试ClassforName() Class testTypeForName=ClassforName(TestClassType)Systemoutprintln(testForName——+testTypeForName)//测试类加载器Systemoutprintln(forName形式的加载器——+testTypeForNamegetClassLoader())//测试类名class Class testTypeClass=TestClassTypeclassSystemoutprintln(testTypeClass——+testTypeClass)//测试类加载器Systemoutprintln(class形式的加载器——+testTypeClassgetClassLoader())//测试ObjectgetClass() TestClassType testGetClass= new TestClassType()Systemoutprintln(testGetClass——+testGetClassgetClass())//测试类加载器Systemoutprintln(getClass形式的加载器——+testGetClassgetClass()getClassLoader())} catch (ClassNotFoundException e) { // TODO Autogenerated catch block eprintStackTrace()} class TestClassType{ //构造函数public TestClassType(){ Systemoutprintln(——构造函数——)} //静态的参数初始化static{ Systemoutprintln(——静态的参数初始化——)} //非静态的参数初始化{ Systemoutprintln(——非静态的参数初始化——)}结果如下观察结果发现三种形式的加载器是相同的 因此可以说明上篇博客中例子中的三个方式生成的Class对象只有一个同样也证明了上篇博客中Class对象生成的原理JVM首先判断内存中是否已经加载该类判断的依据就是此篇博客的介绍 |