本篇文章給大家分享的是有關JVM中怎么判斷類是否相同,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
JVM根據兩個方面判斷:一是類的全稱;另一個是類加載器。
根據上篇博客中的結果得出:類的全稱是相同的。那類加載器是否相同呢?即使類的全稱相同,而使用的加載器不同,那Class對象也是不同的。那我們繼續上篇博客中的例子,看看所使用的加載器的結果如何呢?其中使用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{ //構造函數 public TestClassType(){ System.out.println("----構造函數---"); } //靜態的參數初始化 static{ System.out.println("---靜態的參數初始化---"); } //非靜態的參數初始化 { System.out.println("----非靜態的參數初始化---"); } }
結果如下:
觀察結果發現:三種形式的加載器是相同的。
因此可以說明上篇博客中例子中的三個方式生成的Class對象只有一個.同樣也證明了上篇博客中Class對象生成的原理。JVM首先判斷內存中是否已經加載該類。判斷的依據就是此篇博客的介紹。
以上就是JVM中怎么判斷類是否相同,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。