程序中的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首先判斷內存中是否已經加載該類判斷的依據就是此篇博客的介紹
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26602.html