日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中Class对象详解

發(fā)布時(shí)間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中Class对象详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?java中把生成Class對(duì)象和實(shí)例對(duì)象弄混了,更何況生成Class對(duì)象和生成instance都有多種方式。所以只有弄清其中的原理,才可以深入理解。首先要生成Class對(duì)象,然后再生成Instance。那Class對(duì)象的生成方式有哪些呢,以及其中是如何秘密生成的呢?

Class對(duì)象的生成方式如下:

1.Class.forName("類名字符串")? (注意:類名字符串必須是全稱,包名+類名)

2.類名.class

3.實(shí)例對(duì)象.getClass()

通過一段小程序,來觀察一下Class對(duì)象的生成的原理。

[java] view plaincopyprint?
  • /**?
  • ?
  • ?*?2012-2-6?
  • ?
  • ?*?Administrator?
  • ?
  • ?*/??
  • ??
  • /**?
  • ?
  • ?*?@author:?梁煥月??
  • ?
  • ?*?文件名:TestClass.java??
  • ?
  • ?*?時(shí)間:2012-2-6上午10:01:52???
  • ?
  • ?*/??
  • ??
  • public?class?TestClass?{??
  • ??
  • ???
  • ??
  • public??static?void?main(String[]?args)??
  • ??
  • {??
  • ??
  • try?{??
  • ??
  • //測(cè)試Class.forName()??
  • ??
  • Class?testTypeForName=Class.forName("TestClassType");??????????
  • ??
  • System.out.println("testForName---"+testTypeForName);??
  • ??
  • //測(cè)試類名.class??
  • ??
  • Class?testTypeClass=TestClassType.class;??
  • ??
  • System.out.println("testTypeClass---"+testTypeClass);??
  • ??
  • //測(cè)試Object.getClass()??
  • ??
  • TestClassType?testGetClass=?new?TestClassType();??
  • ??
  • System.out.println("testGetClass---"+testGetClass.getClass());??
  • ??
  • ???
  • ??
  • }?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ù)初始化---");??
  • ??
  • }??????????
  • ??
  • }??
  • ?

    測(cè)試的結(jié)果如下:

    ---靜態(tài)的參數(shù)初始化---

    testForName---class TestClassType

    testTypeClass---class TestClassType

    ----非靜態(tài)的參數(shù)初始化---

    ----構(gòu)造函數(shù)---

    testGetClass---class TestClassType

    ?

    根據(jù)結(jié)果可以發(fā)現(xiàn),三種生成的Class對(duì)象一樣的。并且三種生成Class對(duì)象只打印一次“靜態(tài)的參數(shù)初始化”。?

    我們知道,靜態(tài)的方法屬性初始化,是在加載類的時(shí)候初始化。而非靜態(tài)方法屬性初始化,是new類實(shí)例對(duì)象的時(shí)候加載。

    因此,這段程序說明,三種方式生成Class對(duì)象,其實(shí)只有一個(gè)Class對(duì)象。在生成Class對(duì)象的時(shí)候,首先判斷內(nèi)存中是否已經(jīng)加載。

    所以,生成Class對(duì)象的過程其實(shí)是如此的:

    當(dāng)我們編寫一個(gè)新的java類時(shí),JVM就會(huì)幫我們編譯成class對(duì)象,存放在同名的.class文件中。在運(yùn)行時(shí),當(dāng)需要生成這個(gè)類的對(duì)象,JVM就會(huì)檢查此類是否已經(jīng)裝載內(nèi)存中。若是沒有裝載,則把.class文件裝入到內(nèi)存中。若是裝載,則根據(jù)class文件生成實(shí)例對(duì)象。

    總結(jié)

    以上是生活随笔為你收集整理的java中Class对象详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。