JVM如何判断类相同

上篇博客中,提到Class生成对象的原理,根据上篇博客的小例子,得出的结果程序中的Class对象是一样的,是只有一个Class对象。那JVM是如何判断这三个Class对象其实是一个Class对象呢?

在寿光等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都网站设计 网站设计制作按需定制,公司网站建设,企业网站建设,品牌网站设计,营销型网站,外贸网站建设,寿光网站建设费用合理。

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

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

 
 
 
  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.  

结果如下:

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

因此可以说明上篇博客中例子中的三个方式生成的Class对象只有一个.同样也证明了上篇博客中Class对象生成的原理。JVM首先判断内存中是否已经加载该类。判断的依据就是此篇博客的介绍。

新闻标题:JVM如何判断类相同
浏览地址:http://www.shufengxianlan.com/qtweb/news48/88898.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联