在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Java/ Java instanceof運算符
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運算符
Java抽象類
Java快速入門
Java實例初始化程序塊
Java靜態(tài)綁定和動態(tài)綁定
Java do-while循環(huán)
Java對象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點
Java數(shù)組
Java instanceof運算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡單Java程序
Java基礎(chǔ)實例程序
Java對象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學(xué)習Java編程?
對象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java instanceof運算符

java instanceof運算符用于測試指定對象是否是指定類型(類或子類或接口)的實例。

java中的instanceof也稱為類型比較運算符,因為它將類型與實例進行比較。 它返回truefalse。 如果對任何具有null值的變量應(yīng)用instanceof運算符,則返回false。

java instanceof的簡單示例

下面來看看實例運算符的簡單示例,它測試當前類。

class Simple1 {
    public static void main(String args[]) {
        Simple1 s = new Simple1();
        System.out.println(s instanceof Simple1);// true
    }
}

執(zhí)行上面試代碼,得到以下結(jié)果 -

true

子類類型的對象也是父類的類型。 例如,如果Dog擴展了Animal,那么Dog的對象可以通過DogAnimal類來引用。

java instanceof運算符的另一個例子

class Animal {
}

class Dog1 extends Animal {// Dog inherits Animal

    public static void main(String args[]) {
        Dog1 d = new Dog1();
        System.out.println(d instanceof Animal);// true
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

true

instanceof測試null值的變量示例

如果我們對具有null值的變量應(yīng)用instanceof運算符,則返回false。來看看下面給出的例子,將instanceof運算符應(yīng)用于具有null值的變量。

class Dog2 {
    public static void main(String args[]) {
        Dog2 d = null;
        System.out.println(d instanceof Dog2);// false
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

false

使用java instanceof運算符的向下轉(zhuǎn)換

當子類型引用父類的對象時,它被稱為向下轉(zhuǎn)換(downcasting)。 如果直接執(zhí)行它,編譯器會出現(xiàn)編譯錯誤。 如果通過類型轉(zhuǎn)換來執(zhí)行,在運行時會拋出:ClassCastException 。 但是如果使用instanceof運算符,可以進行向下轉(zhuǎn)換。

Dog d=new Animal();//Compilation error

如果通過類型轉(zhuǎn)換執(zhí)行向下轉(zhuǎn)換,則在運行時拋出:ClassCastException。

Dog d=(Dog)new Animal();  
//Compiles successfully but ClassCastException is thrown at runtime

使用instanceof進行向下轉(zhuǎn)換

現(xiàn)在看看下面這個例子,通過instanceof運算符進行向下轉(zhuǎn)換。

class Animal {
}

class Dog3 extends Animal {
    static void method(Animal a) {
        if (a instanceof Dog3) {
            Dog3 d = (Dog3) a;// downcasting
            System.out.println("ok downcasting performed");
        }
    }

    public static void main(String[] args) {
        Animal a = new Dog3();
        Dog3.method(a);
    }

}

執(zhí)行上面代碼,得到以下結(jié)果 -

ok downcasting performed

向下轉(zhuǎn)換不使用instanceof

也可以在不使用instanceof運算符的情況下執(zhí)行下轉(zhuǎn)換,如以下示例代碼所示:

class Animal {
}

class Dog4 extends Animal {
    static void method(Animal a) {
        Dog4 d = (Dog4) a;// downcasting
        System.out.println("ok downcasting performed");
    }

    public static void main(String[] args) {
        Animal a = new Dog4();
        Dog4.method(a);
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

ok downcasting performed

仔細看看,被引用的實際對象是Dog類的對象。 所以如果向下轉(zhuǎn)換它,它是沒有問題的。 但是,如果也可以這樣寫:

Animal a=new Animal();  
Dog.method(a);  
//Now ClassCastException but not in case of instanceof operator

理解在java中使用instanceof的實例

這是一個instanceof的終極示例,通過下面的例子中的代碼看看instanceof關(guān)鍵字的真正用法。

interface Printable {
}

class A implements Printable {
    public void a() {
        System.out.println("a method");
    }
}

class B implements Printable {
    public void b() {
        System.out.println("b method");
    }
}

class Call {
    void invoke(Printable p) {// upcasting
        if (p instanceof A) {
            A a = (A) p;// Downcasting
            a.a();
        }
        if (p instanceof B) {
            B b = (B) p;// Downcasting
            b.b();
        }

    }
}// end of Call class

class Test4 {
    public static void main(String args[]) {
        Printable p = new B();
        Call c = new Call();
        c.invoke(p);
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

b method