欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java進階教程之運行時類型識別RTTI機制

 更新時間:2014年09月01日 13:12:54   投稿:junjie  
這篇文章主要介紹了Java進階教程之運行時類型識別RTTI機制,在Java運行時,RTTI維護類的相關(guān)信息,比如多態(tài)(polymorphism)就是基于RTTI實現(xiàn)的,需要的朋友可以參考下

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

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

Class類

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

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

復制代碼 代碼如下:

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());
    }

}

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

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

Java中每個對象都有相應(yīng)的Class類對象,因此,我們隨時能通過Class對象知道某個對象“真正”所屬的類。無論我們對引用進行怎樣的類型轉(zhuǎn)換,對象本身所對應(yīng)的Class對象都是同一個。當我們通過某個引用調(diào)用方法時,Java總能找到正確的Class類中所定義的方法,并執(zhí)行該Class類中的代碼。由于Class對象的存在,Java不會因為類型的向上轉(zhuǎn)換而迷失。這就是多態(tài)的原理。

getClass: 我是誰?

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

復制代碼 代碼如下:

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()方法接收一個字符串作為參數(shù),該字符串是類的名字。這將返回相應(yīng)的Class類對象。

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

Class類的方法

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

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

Human newPerson = c1.newInstance(); 

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

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

復制代碼 代碼如下:

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

可以進一步使用Reflection分析類。這里不再深入。

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

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

Class類的加載

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

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

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

相關(guān)文章

  • ShardingSphere如何進行sql重寫示例詳解

    ShardingSphere如何進行sql重寫示例詳解

    這篇文章主要為大家介紹了ShardingSphere如何進行sql重寫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java實現(xiàn)斷點下載服務(wù)端與客戶端的示例代碼

    Java實現(xiàn)斷點下載服務(wù)端與客戶端的示例代碼

    這篇文章主要為大家介紹了如何實現(xiàn)服務(wù)端(Spring Boot)與客戶端(Android)的斷點下載與下載續(xù)傳功能,文中的示例代碼講解詳細,需要的可以參考一下
    2022-08-08
  • 一篇文章帶你了解Spring?AOP?的注解

    一篇文章帶你了解Spring?AOP?的注解

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Spring事件監(jiān)聽機制ApplicationEvent方式

    Spring事件監(jiān)聽機制ApplicationEvent方式

    這篇文章主要介紹了Spring事件監(jiān)聽機制ApplicationEvent方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot Shiro 權(quán)限注解不起作用的解決方法

    SpringBoot Shiro 權(quán)限注解不起作用的解決方法

    本文主要介紹了SpringBoot Shiro 權(quán)限注解不起作用的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 解決Eclipse中java文件的圖標變成空心J的問題

    解決Eclipse中java文件的圖標變成空心J的問題

    這篇文章主要介紹了解決Eclipse中java文件的圖標變成空心J的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Springboot集成swagger實現(xiàn)方式

    Springboot集成swagger實現(xiàn)方式

    這篇文章主要介紹了Springboot集成swagger實現(xiàn)方式,通過簡單的示例代碼詳細描述了實現(xiàn)過程步驟,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-08-08
  • Java實現(xiàn)任意進制轉(zhuǎn)換

    Java實現(xiàn)任意進制轉(zhuǎn)換

    這篇文章主要為大家詳細介紹了Java實現(xiàn)任意進制轉(zhuǎn)換的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringAMQP的使用方式案例詳解

    SpringAMQP的使用方式案例詳解

    這篇文章主要介紹了SpringAMQP的使用方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • Java編程關(guān)于子類重寫父類方法問題的理解

    Java編程關(guān)于子類重寫父類方法問題的理解

    這篇文章主要介紹了Java編程關(guān)于子類重寫父類方法問題的理解,分享了有關(guān)子類重寫父類的實例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11

最新評論