国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

第十四章 類型信息

2019-11-08 19:59:27
字體:
來源:轉載
供稿:網友

1、每個類都有一個class對象,每當編寫并且編譯了一個 新類,就會產生一個class對象,更恰當的說,是被保存在一個同名的.class文件中,為了生成這個類對象,運行這個程序的java虛擬機jvm將使用被稱為類加載器的子系統。所有類都是在對其第一次使用時,動態加載到jvm中的,當程序創建第一個對類的靜態成員的引用時,就會加載這個類。

2、類的構造器也是靜態方法,即使在構造器前面并沒有使用static關鍵字,因此,用new關鍵字調用構造方法時也會加載這個類

3、類加載器首先檢查這個Class對象是否已經加載,如果尚未加載,默認的類加載器就會根據類名查找.class 文件,在這個類的字節碼被加載時,它們會接受驗證,以確保沒有被破壞,并且不包含不良java代碼

4、Class的forName方法時取得Class對象的引用的一種方法,對forName的調用時為了它產生的副作用,如果某個類還沒有被加載就加載它,在加載的過程中,static字句被執行

5、Class類的getName方法:獲取類的全名(包含包名),getSimpleName方法:獲取簡稱(不包含包名,只是類名),isInterface方法:判斷類是否是interface,getInterfaces方法:獲取類的所有接口

6、用Class.forName.newInstance的方式來創建一個Class的對象時,Class必須帶有一個默認的構造器,否則無法知道應該調用哪一個構造器來初始化Class對象

7、java還提供了另一種方式來生成對class對象的引用,即:類字面常量    FacyToy.class 。類字面常量不僅可以應用于普通類,也可以用于接口,數組以及基本數據類型。另外,對于基本數據類型的包裝類,還有一個標準字段TYPE。boolean.class 等價于Boolean.TYPE。當使用.class來創建對Class對象的引用時,不會自動的初始化該Class對象。

8、為了使用類而做的準備工作有如下三步:

  1)、加載:這是由類加載器執行的,該步驟查找字節碼(從class文件中),并從字節碼中創建一個Class對象

  2)、鏈接:在鏈接階段將驗證字節碼,為靜態域分配存儲空間,并且如果必須的話,將解析這個類創建的對其他類的所有引用

  3)、初始化:如果該類具有超類,則對其初始化,執行靜態初始化器和靜態初始化快。初始化被延遲到了對靜態方法(構造器隱式的是靜態的)或者非常數靜態域進行首次引用時才執行

示例程序:

class Initable {  static final int staticFinal = 47;  static final int staticFinal2 =    ClassInitialization.rand.nextInt(1000);  static {    System.out.PRintln("Initializing Initable");  }}class Initable2 {  static int staticNonFinal = 147;  static {    System.out.println("Initializing Initable2");  }}class Initable3 {  static int staticNonFinal = 74;  static {    System.out.println("Initializing Initable3");  }}public class ClassInitialization {  public static Random rand = new Random(47);  public static void main(String[] args) throws Exception {    Class initable = Initable.class;    System.out.println("After creating Initable ref");    // Does not trigger initialization:    System.out.println(Initable.staticFinal);    // Does trigger initialization:    System.out.println(Initable.staticFinal2);    // Does trigger initialization:    System.out.println(Initable2.staticNonFinal);    Class initable3 = Class.forName("Initable3");    System.out.println("After creating Initable3 ref");    System.out.println(Initable3.staticNonFinal);  }} /* Output:After creating Initable ref47Initializing Initable258Initializing Initable2147Initializing Initable3After creating Initable3 ref74

該程序的解釋詳見p353頁


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会泽县| 巴塘县| 泸西县| 新绛县| 平潭县| 凤台县| 临江市| 冀州市| 花莲县| 安阳县| 兰州市| 潢川县| 静海县| 穆棱市| 建瓯市| 庆城县| 天全县| 诸城市| 常熟市| 左云县| 陕西省| 兰州市| 化德县| 禹州市| 黄骅市| 门源| 鄱阳县| 鹤庆县| 锦屏县| 抚顺市| 荥阳市| 玉溪市| 安顺市| 赫章县| 汉川市| 丰都县| 天门市| 长子县| 金寨县| 张北县| 白水县|