<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    Java語言基礎:RTTI

    發布時間:2011-3-29 19:34    發布者:1770309616
    關鍵詞: Java語言基礎 , RTTI
    Java語言基礎.pdf (205.39 KB)


    1.  每個類都有一個Class對象,當我們在運行期第一次生成類的實例時,JVM就加載這個類的Class對象,然后用這個Class對象來創建類實例;Class類似于Delphi中的引用類TClass,用于保存類的運行時信息。

    2.  Class的static方法forName()用于查找某個類的Class對象,如果forName找不到你要的類的Class對象,會拋出ClassNotFoundException異常:
    view plaincopy to clipboardprint?
    01.class A{   
    02.}   
    03.   
    04.public class Main {               
    05.    public static void main(String[] args) {   
    06.        try {   
    07.            Class cls = Class.forName("A");   
    08.            System.out.println(cls.getName());   
    09.        } catch (ClassNotFoundException e) {   
    10.            e.printStackTrace();   
    11.        }   
    12.    }   
    13.}  
    class A{
    }

    public class Main {            
        public static void main(String[] args) {
            try {
                Class cls = Class.forName("A");
                System.out.println(cls.getName());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    3.  查找類的Class對象的另一個方法是直接調用類.class,這會在編譯期就檢查是否正確,因此不需要捕獲異常:
    view plaincopy to clipboardprint?
    01.class A{   
    02.}   
    03.   
    04.public class Main {               
    05.    public static void main(String[] args) {   
    06.        // 類有class關鍵字   
    07.        Class acls = A.class;   
    08.        System.out.println(acls.getName());   
    09.        // 普通類型也有   
    10.        Class icls = int.class;   
    11.        System.out.println(icls.getName());   
    12.    }   
    13.}  
    class A{
    }

    public class Main {            
        public static void main(String[] args) {
            // 類有class關鍵字
            Class
    acls = A.class;
            System.out.println(acls.getName());
            // 普通類型也有
            Class icls = int.class;
            System.out.println(icls.getName());
        }
    }
    4.  判斷兩個對象是否屬于同一個類,可以通過比較他們的class的方式,通過對象的getClass()方法可以得Class對象:
    view plaincopy to clipboardprint?
    01.class A{   
    02.}   
    03.class B extends A {   
    04.}   
    05.public class Main {               
    06.    public static void main(String[] args) {   
    07.        A a = new B();   
    08.        B b = new B();   
    09.        // a和b都B的實例,所以為true   
    10.        if (a.getClass() == b.getClass())   
    11.            System.out.print("yes");   
    12.        else  
    13.            System.out.print("no");   
    14.    }   
    15.}  
    class A{
    }
    class B extends A {
    }
    public class Main {            
        public static void main(String[] args) {
            A a = new B();
            B b = new B();
            // a和b都B的實例,所以為true
            if (a.getClass() == b.getClass())
                System.out.print("yes");
            else
                System.out.print("no");
        }
    }

    5.  要判斷對象是否繼承或屬于某個類,可以通過兩個方法:1是使用instanceof關鍵字,2是使用Class.isInstance方法:
    view plaincopy to clipboardprint?
    01.class A{   
    02.}   
    03.class B extends A {   
    04.}   
    05.public class Main {               
    06.    public static void main(String[] args) {   
    07.        A a = new B();   
    08.        B b = new B();   
    09.        // 使用instanceof關鍵字,a是否A或其子類的對象   
    10.        if (a instanceof A)   
    11.            System.out.println("Yes");   
    12.        // 使用instanceof關鍵字,b是否B或其子類的對象   
    13.        if (b instanceof B)   
    14.            System.out.println("Yes");   
    15.        // 使用isInstance方法   
    16.        if (A.class.isInstance(a))   
    17.            System.out.println("Yes");   
    18.        if (B.class.isInstance(a))   
    19.            System.out.println("Yes");   
    20.    }   
    21.}  
    class A{
    }
    class B extends A {
    }
    public class Main {            
        public static void main(String[] args) {
            A a = new B();
            B b = new B();
            // 使用instanceof關鍵字,a是否A或其子類的對象
            if (a instanceof A)
                System.out.println("Yes");
            // 使用instanceof關鍵字,b是否B或其子類的對象
            if (b instanceof B)
                System.out.println("Yes");
            // 使用isInstance方法
            if (A.class.isInstance(a))
                System.out.println("Yes");
            if (B.class.isInstance(a))
                System.out.println("Yes");
        }
    }

    6.  Class.NewInstance可以創建一個類實例,該類必須有默認構造函數,否則會拋出InstantiationException異常:
    view plaincopy to clipboardprint?
    01.class A{   
    02.}   
    03.public class Main {               
    04.    public static void main(String[] args) {   
    05.        try {   
    06.            A a = A.class.newInstance();   
    07.        } catch (InstantiationException e) {   
    08.            e.printStackTrace();   
    09.        } catch (IllegalAccessException e) {   
    10.            e.printStackTrace();   
    11.        }   
    12.    }   
    13.}  
    class A{
    }
    public class Main {            
        public static void main(String[] args) {
            try {
                A a = A.class.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

    7.  Class還提供了一些更強大的方法,可以得到類的更多信息,比如:getSuperclass: 取得父類的Class對象;getInterfaces: 取得實現的接口數組;還有其他很多方法。
    本文地址:http://www.portaltwn.com/thread-60385-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區
    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷