更新時間:2020-10-27 17:54:32 來源:動力節點 瀏覽1313次
instanceof 是 Java 語言中的一個二元操作符,和 = =、>、< 等是同一類元素。由于 instanceof 是由字母組成的,所以它也是Java的保留關鍵字。Java中 instance of 運算符用法是學習instance of 運算符的關鍵所在。
1.instanceof 的作用是測試它左邊的對象是否是它右邊類的實例,然后返回一個 boolean 類型的 instanceof。請看下面的代碼。
String s = "I AM an Object!";
boolean isObject = s instanceof Object;
上述代碼聲明了一個 String 型對象引用,指向一個 String 型對象,然后用 instanceof 來測試它所指向的對象是否是 Object 類的一個實例。因為這是真的,所以返回結果 true,也就是 isObject 的值為 true。
比如我們在編寫一個處理賬單系統時,其中有如下 3 個類。
public class Bill {//省略細節}
public class PhoneBill extends Bill {//省略細節}
public class GasBill extends Bill {//省略細節}
在具體處理程序中有一個專門的方法來接受一個 Bill 類型的對象,這樣可以計算金額。假設兩種賬單的計算方法不同,而傳入的 Bill 對象可能是兩種中的任何一種,因此需要使用 instanceof 來判斷。
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//計算電話賬單
}
if (bill instanceof GasBill) {
//計算燃氣賬單
}
...
}
這樣就可以用一個方法處理兩種子類。
2.然而,這種做法通常被認為是沒有好好利用面向對象中的多態性。其實上面的功能要求用方法重載完全可以實現,這是面向對象變成應有的做法,避免回到結構化編程模式。只要提供兩個名字和返回值都相同,接受參數類型不同的方法就可以了:
public double calculate(PhoneBill bill) {
//計算電話賬單
}
public double calculate(GasBill bill) {
//計算燃氣賬單
}
所以,使用instanceof在絕大多數情況下并不是推薦的做法,應當好好利用多態。
3.同時也可以用instance of 來判斷某個對象是否是某個Class類的實例。
用法:
boolean result = object instanceof class
參數:
result :boolean類型。
object :必選項。任意對象表達式。
class:必選項。任意已定義的對象類。
說明:
如果該object 是該class的一個實例,那么返回true。如果該object 不是該class的一個實例,或者object是null,則返回false。
例子:
package com.instanceoftest;
interface A { }
class B implements A { } //B是A的實現
class C extends B { } //C繼承B
class D { }
class instanceoftest {
public static void main(String[] args) {
A a = null;
B b = null;
boolean res;
System.out.println("instanceoftest test case 1: ------------------");
res = a instanceof A;
System.out.println("a instanceof A: " + res); // a instanceof A:false
res = b instanceof B;
System.out.println("b instanceof B: " + res); // b instanceof B: false
System.out.println("\ninstanceoftest test case 2: ------------------");
a = new B();
b = new B();
res = a instanceof A;
System.out.println("a instanceof A: " + res); // a instanceof A:true
res = a instanceof B;
System.out.println("a instanceof B: " + res); // a instanceof B:true
res = b instanceof A;
System.out.println("b instanceof A: " + res); // b instanceof A:true
res = b instanceof B;
System.out.println("b instanceof B: " + res); // b instanceof B:true
System.out.println("\ninstanceoftest test case 3: ------------------");
B b2 = new C();
res = b2 instanceof A;
System.out.println("b2 instanceof A: " + res); // b2 instanceof A:true
res = b2 instanceof B;
System.out.println("b2 instanceof B: " + res); // b2 instanceof A:true
res = b2 instanceof C;
System.out.println("b2 instanceof C: " + res); // b2 instanceof A:true
System.out.println("\ninstanceoftest test case 4: ------------------");
D d = new D();
res = d instanceof A;
System.out.println("d instanceof A: " + res); // d instanceof A:false
res = d instanceof B;
System.out.println("d instanceof B: " + res); // d instanceof B:false
res = d instanceof C;
System.out.println("d instanceof C: " + res); // d instanceof C:false
res = d instanceof D;
System.out.println("d instanceof D: " + res); // d instanceof D:true
}
}
以上就是在Java語言中,instead of運算符的用法實例,我們可以仔細剖析,認真求證,學習其中的精髓。然后,結合本站的關系運算符教程里對instead of運算符的詳細講解,一定能夠完全掌握instead of 運算符的相關知識!
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習