JVM如何判断类相同

JVM是如何判断这三个Class对象其实是一个Class对象呢?

      JVM根据两个方面判断:一是类的全称;另一个是类加载器.

      根据上篇博客中的结果得出:类的全称是相同的.那类加载器是否相同呢?即使类的全称相同,而使用的加载器不同,那Class对象也是不同的.那我们继续上篇博客中的例子,看看所使用的加载器的结果如何呢?其中使用getClassLoad()方法.

[java]
  1. /** 
  2.  
  3.  * @author:
  4.  
  5.  * 文件名:TestClass.java  
  6.  
  7.  * 时间:2012-2-6上午10:01:52   
  8.  
  9.  */  
  10.   
  11. public class TestClass {  
  12.   
  13.    
  14.   
  15. public  static void main(String[] args)  
  16.   
  17. {  
  18.   
  19. try {  
  20.   
  21. //测试Class.forName()  
  22.   
  23. Class testTypeForName=Class.forName("TestClassType");          
  24.   
  25. System.out.println("testForName---"+testTypeForName);  
  26.   
  27. //测试类加载器  
  28.   
  29. System.out.println("forName形式的加载器--"+testTypeForName.getClassLoader());  
  30.   
  31. //测试类名.class  
  32.   
  33. Class testTypeClass=TestClassType.class;  
  34.   
  35. System.out.println("testTypeClass---"+testTypeClass);  
  36.   
  37. //测试类加载器  
  38.   
  39. System.out.println(".class形式的加载器---"+testTypeClass.getClassLoader());  
  40.   
  41. //测试Object.getClass()  
  42.   
  43. TestClassType testGetClass= new TestClassType();  
  44.   
  45. System.out.println("testGetClass---"+testGetClass.getClass());  
  46.   
  47. //测试类加载器  
  48.   
  49. System.out.println("getClass形式的加载器--"+testGetClass.getClass().getClassLoader());   
  50.   
  51. catch (ClassNotFoundException e) {  
  52.   
  53. // TODO Auto-generated catch block  
  54.   
  55. e.printStackTrace();  
  56.   
  57. }  
  58.   
  59.    
  60.   
  61. }  
  62.   
  63. }  
  64.   
  65.  class TestClassType{  
  66.   
  67. //构造函数  
  68.   
  69. public TestClassType(){  
  70.   
  71. System.out.println("----构造函数---");  
  72.   
  73. }  
  74.   
  75. //静态的参数初始化  
  76.   
  77. static{  
  78.   
  79. System.out.println("---静态的参数初始化---");  
  80.   
  81. }  
  82.   
  83. //非静态的参数初始化  
  84.   
  85. {  
  86.   
  87. System.out.println("----非静态的参数初始化---");  
  88.   
  89. }          
  90.   
  91. }  

 

   结果如下:

   观察结果发现:三种形式的加载器是相同的.

    JVM首先判断内存中是否已经加载该类。

posted @ 2012-11-06 16:58  zhangyoushugz  阅读(288)  评论(0编辑  收藏  举报