国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java進(jìn)階教程之運(yùn)行時(shí)類型識(shí)別RTTI機(jī)制

Java進(jìn)階教程之運(yùn)行時(shí)類型識(shí)別RTTI機(jī)制

2019-11-27 15:11junjie JAVA教程

這篇文章主要介紹了Java進(jìn)階教程之運(yùn)行時(shí)類型識(shí)別RTTI機(jī)制,在Java運(yùn)行時(shí),RTTI維護(hù)類的相關(guān)信息,比如多態(tài)(polymorphism)就是基于RTTI實(shí)現(xiàn)的,需要的朋友可以參考下

運(yùn)行時(shí)類型識(shí)別(RTTI, Run-Time Type Identification)是Java中非常有用的機(jī)制,在Java運(yùn)行時(shí),RTTI維護(hù)類的相關(guān)信息。

多態(tài)(polymorphism)是基于RTTI實(shí)現(xiàn)的。RTTI的功能主要是由Class類實(shí)現(xiàn)的。

Class類

Class類是"類的類"(class of classes)。如果說(shuō)類是對(duì)象的抽象和集合的話,那么Class類就是對(duì)類的抽象和集合。

每一個(gè)Class類的對(duì)象代表一個(gè)其他的類。比如下面的程序中,Class類的對(duì)象c1代表了Human類,c2代表了Woman類。

 

復(fù)制代碼代碼如下:


public class Test
{
    public static void main(String[] args)
    {
        Human aPerson = new Human();
        Class c1      = aPerson.getClass();
        System.out.println(c1.getName());

 

        Human anotherPerson = new Woman();
        Class c2      = anotherPerson.getClass();
        System.out.println(c2.getName());  
    }
}

class Human
{    
    /**
     * accessor
     */
    public int getHeight()
    {
       return this.height;
    }

    /**
     * mutator
     */
    public void growHeight(int h)
    {
        this.height = this.height + h;
    }
private int height; 
}


class Woman extends Human
{
    /**
     * new method
     */
    public Human giveBirth()
    {
        System.out.println("Give birth");
        return (new Human());
    }

}

 

當(dāng)我們調(diào)用對(duì)象的getClass()方法時(shí),就得到對(duì)應(yīng)Class對(duì)象的引用。

在c2中,即使我們將Women對(duì)象的引用向上轉(zhuǎn)換為Human對(duì)象的引用,對(duì)象所指向的Class類對(duì)象依然是Woman。

Java中每個(gè)對(duì)象都有相應(yīng)的Class類對(duì)象,因此,我們隨時(shí)能通過(guò)Class對(duì)象知道某個(gè)對(duì)象“真正”所屬的類。無(wú)論我們對(duì)引用進(jìn)行怎樣的類型轉(zhuǎn)換,對(duì)象本身所對(duì)應(yīng)的Class對(duì)象都是同一個(gè)。當(dāng)我們通過(guò)某個(gè)引用調(diào)用方法時(shí),Java總能找到正確的Class類中所定義的方法,并執(zhí)行該Class類中的代碼。由于Class對(duì)象的存在,Java不會(huì)因?yàn)轭愋偷南蛏限D(zhuǎn)換而迷失。這就是多態(tài)的原理。

Java進(jìn)階教程之運(yùn)行時(shí)類型識(shí)別RTTI機(jī)制

getClass: 我是誰(shuí)?

除了getClass()方法外,我們還有其他方式調(diào)用Class類的對(duì)象。

 

復(fù)制代碼代碼如下:


public class Test
{
    public static void main(String[] args)
    {
        Class c3      = Class.forName("Human");
        System.out.println(c1.getName());

 

        Class c4      = Woman.class
        System.out.println(c2.getName());  
    }
}

 

上面顯示了兩種方式:

1.forName()方法接收一個(gè)字符串作為參數(shù),該字符串是類的名字。這將返回相應(yīng)的Class類對(duì)象。

2.Woman.class方法是直接調(diào)用類的class成員。這將返回相應(yīng)的Class類對(duì)象。

Class類的方法

Class對(duì)象記錄了相應(yīng)類的信息,比如類的名字,類所在的包等等。我們可以調(diào)用相應(yīng)的方法,比如:

復(fù)制代碼代碼如下:

getName()         返回類的名字
getPackage()      返回類所在的包

 

可以利用Class對(duì)象的newInstance()方法來(lái)創(chuàng)建相應(yīng)類的對(duì)象,比如:

復(fù)制代碼代碼如下:

Human newPerson = c1.newInstance();  


newInstance()調(diào)用默認(rèn)的不含參數(shù)的構(gòu)建方法。

 

我們可以獲得類定義的成員:

復(fù)制代碼代碼如下:

getFields()       返回所有的public數(shù)據(jù)成員
getMethods()      返回所有的public方法


可以進(jìn)一步使用Reflection分析類。這里不再深入。

 

Class類更多的方法可查詢官方文檔:

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html

Class類的加載

當(dāng)Java創(chuàng)建某個(gè)類的對(duì)象,比如Human類對(duì)象時(shí),Java會(huì)檢查內(nèi)存中是否有相應(yīng)的Class對(duì)象。

如果內(nèi)存中沒(méi)有相應(yīng)的Class對(duì)象,那么Java會(huì)在.class文件中尋找Human類的定義,并加載Human類的Class對(duì)象。

在Class對(duì)象加載成功后,其他Human對(duì)象的創(chuàng)建和相關(guān)操作都將參照該Class對(duì)象。

延伸 · 閱讀

精彩推薦
273
主站蜘蛛池模板: 亚洲精品成人 | 久久久久久久国产精品 | 在线观看av网站永久 | 午夜社区| 亚洲综合无码一区二区 | 国产视频第一页 | 日韩中文字幕在线 | 一本在线| 日韩三区| 亚洲黄页| 欧美一区亚洲二区 | 日韩中文字幕视频在线观看 | 日韩国产中文字幕 | 成人午夜影院 | 欧美 日韩 国产 成人 在线 | 日韩精品一区二 | 一级成人av| 男人天堂网av | 亚洲成人自拍 | 久久人人爽爽爽人久久久 | 日本不卡一区二区三区在线观看 | 91av精品视频 | 九九热视频精品在线观看 | 国产精品免费一区二区 | 国产一区二区综合 | 91精品国产91久久久久久 | 成人黄色短视频在线观看 | 久久亚| 中文字幕日韩视频 | 中国女人黄色大片 | 一区二区三区不卡视频 | 亚洲一区二区三区在线免费观看 | 99精品一区二区三区 | 亚洲国产精品成人 | 精品一区二区三区免费毛片 | 国产一级一级国产 | 特黄特色大片在线观看视频网站 | 亚洲自拍偷拍在线 | 国产一级片播放 | 亚洲一区在线视频 | 午夜精品久久久久久久白皮肤 |