新聞中心
上篇博客中,提到Class生成對象的原理,根據(jù)上篇博客的小例子,得出的結(jié)果程序中的Class對象是一樣的,是只有一個Class對象。那JVM是如何判斷這三個Class對象其實(shí)是一個Class對象呢?

在壽光等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需定制,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,營銷型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),壽光網(wǎng)站建設(shè)費(fèi)用合理。
JVM根據(jù)兩個方面判斷:一是類的全稱;另一個是類加載器。
根據(jù)上篇博客中的結(jié)果得出:類的全稱是相同的。那類加載器是否相同呢?即使類的全稱相同,而使用的加載器不同,那Class對象也是不同的。那我們繼續(xù)上篇博客中的例子,看看所使用的加載器的結(jié)果如何呢?其中使用getClassLoad()方法。
- /**
- * @author: 梁煥月
- * 文件名:TestClass.java
- * 時間:2012-2-6上午10:01:52
- */
- public class TestClass {
- public static void main(String[] args)
- {
- try {
- //測試Class.forName()
- Class testTypeForName=Class.forName("TestClassType");
- System.out.println("testForName---"+testTypeForName);
- //測試類加載器
- System.out.println("forName形式的加載器--"+testTypeForName.getClassLoader());
- //測試類名.class
- Class testTypeClass=TestClassType.class;
- System.out.println("testTypeClass---"+testTypeClass);
- //測試類加載器
- System.out.println(".class形式的加載器---"+testTypeClass.getClassLoader());
- //測試Object.getClass()
- TestClassType testGetClass= new TestClassType();
- System.out.println("testGetClass---"+testGetClass.getClass());
- //測試類加載器
- System.out.println("getClass形式的加載器--"+testGetClass.getClass().getClassLoader());
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- class TestClassType{
- //構(gòu)造函數(shù)
- public TestClassType(){
- System.out.println("----構(gòu)造函數(shù)---");
- }
- //靜態(tài)的參數(shù)初始化
- static{
- System.out.println("---靜態(tài)的參數(shù)初始化---");
- }
- //非靜態(tài)的參數(shù)初始化
- {
- System.out.println("----非靜態(tài)的參數(shù)初始化---");
- }
- }
結(jié)果如下:
觀察結(jié)果發(fā)現(xiàn):三種形式的加載器是相同的。
因此可以說明上篇博客中例子中的三個方式生成的Class對象只有一個.同樣也證明了上篇博客中Class對象生成的原理。JVM首先判斷內(nèi)存中是否已經(jīng)加載該類。判斷的依據(jù)就是此篇博客的介紹。
本文名稱:JVM如何判斷類相同
轉(zhuǎn)載源于:http://m.5511xx.com/article/cdshcip.html


咨詢
建站咨詢
