Java語言基礎:RTTI – JAVA編程語言程序開發技術文章

1.  每個類都有一個Class對象,當我們在運行期第一次生成類的實例時,JVM就加載這個類的Class對象,然後用這個Class對象來創建類實例;Class類似於Delphi中的引用類TClass,用於保存類的運行時信息。
 
2.  Class的static方法forName()用於查找某個類的Class對象,如果forName找不到你要的類的Class對象,會拋出ClassNotFoundException異常:
view plaincopy to clipboardprint?
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();  
        }  
    }  

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?
class A{  
}  
   
public class Main {              
    public static void main(String[] args) {  
        // 類有class關鍵字  
        Class<A> acls = A.class;  
        System.out.println(acls.getName());  
        // 普通類型也有  
        Class<Integer> icls = int.class;  
        System.out.println(icls.getName());  
    }  

class A{
}
 
public class Main {           
    public static void main(String[] args) {
        // 類有class關鍵字
        Class<A> acls = A.class;
        System.out.println(acls.getName());
        // 普通類型也有
        Class<Integer> icls = int.class;
        System.out.println(icls.getName());
    }
}
4.  判斷兩個對象是否屬於同一個類,可以通過比較他們的class的方式,通過對象的getClass()方法可以得Class對象:
view plaincopy to clipboardprint?
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”);  
    }  

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?
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”);  
    }  

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”);
        // 使用

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *