• Java中Class对象详解


     java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成 instance都有多种方式。所以只有弄清其中的原理,才可以深入理解。首先要生成Class对象,然后再生成Instance。那Class对象的生 成方式有哪些呢,以及其中是如何秘密生成的呢?

    Class对象的生成方式如下:

    1.Class.forName("类名字符串")  (注意:类名字符串必须是全称,包名+类名)

    2.类名.class

    3.实例对象.getClass()

    通过一段小程序,来观察一下Class对象的生成的原理。

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

    测试的结果如下:

    ---静态的参数初始化---

    testForName---class TestClassType

    testTypeClass---class TestClassType

    ----非静态的参数初始化---

    ----构造函数---

    testGetClass---class TestClassType

    根据结果可以发现,三种生成的Class对象一样的。并且三种生成Class对象只打印一次“静态的参数初始化”。 

    我们知道,静态的方法属性初始化,是在加载类的时候初始化。而非静态方法属性初始化,是new类实例对象的时候加载。

    因此,这段程序说明,三种方式生成Class对象,其实只有一个Class对象。在生成Class对象的时候,首先判断内存中是否已经加载。

    所以,生成Class对象的过程其实是如此的:

    当我们编写一个新的java类时,JVM就会帮我们编译成class对象,存放在同名 的.class文件中。在运行时,当需要生成这个类的对象,JVM就会检查此类是否已经装载内存中。若是没有装载,则把.class文件装入到内存中。若 是装载,则根据class文件生成实例对象。

  • 相关阅读:
    firstresponder 后,键盘不显示
    performSelector
    setNeedsDisplay、setNeedsLayout 区别
    Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
    GCD介绍(一):基本概念和dispatch queues
    一些概念
    /mnt/sdcard /sdcard
    eclipse 导入已存在的工程文件出错
    ios 常用技巧
    ios nsstring去掉换行符
  • 原文地址:https://www.cnblogs.com/jizhuan/p/5090298.html
Copyright © 2020-2023  润新知