Java中instanceof關鍵字的理解、用法和實戰

 

instanceof 理解:

java 中的instanceof 是一個二元操作符(運算符),是Java的保留關鍵字,可以理解爲和 >=,<=,==等操作符屬同一類,它的作用是用來判斷instanceof 左邊對象是否爲instanceof 右邊類的實例,返回一個boolean類型值。還可以用來判斷子父類的所屬關係。

instanceof 用法: 
result = object instanceof Class 
參數: 
result :布爾類型。 
object :必選項。任意對象表達式。 
Class:必選項。任意已定義的對象類。 
說明: 
如果 object 是 class 的一個實例,則 instanceof 運算符返回 true。如果 object 不是指定類的一個實例,或者 object 是 null,則返回 false。

但是instanceof在Java的編譯狀態和運行狀態是有區別的:

在編譯狀態中,class可以是object對象的父類,自身類,子類。在這三種情況下Java編譯時不會報錯。

在運行轉態中,class可以是object對象的父類,自身類,不能是子類。在前兩種情況下result的結果爲true,最後一種爲false。但是class爲子類時編譯不會報錯。運行結果爲false。

簡單Demo:

接口Person

public interface Person {
public void eat();
}

實現類People

public class People implements Person {
private int a=0;
 @Override
 public void eat() {
  System.out.println("======"+a);
 } 

}

子類xiaoming:

public class xiaoming extends People {
private String name;

@Override
public void eat() {
 System.out.println("+++++++++");
}
}

主函數

public static void main(String[] args) {
  People p=new People();
  xiaoming x=new xiaoming();
  System.out.println(p instanceof Person);//編譯正常,運行爲true
  System.out.println(p instanceof xiaoming); //編譯正常,運行爲false
  System.out.println(x instanceof Person);//編譯正常,運行爲true
  System.out.println(x instanceof People);//編譯正常,運行爲true
 }

注意:上面2處的代碼在編譯時不會報錯。

 

實際項目中的使用:

解釋:

上圖中的 String reportExportDate = ValueUtils.parseStringValue(request.getParameter("reportExportDate"), "");

是從request中提取頁面傳來的參數,調用底層(包爲:smartFramework2-core-1.0.2.jar)的如下圖方法,判斷reportExportDate是否存在,以及是否爲String類型,如果不爲空且爲String類型則返回本身,如果不爲空但是不是String類型,則轉型爲String類型返回,否則返回返回默認String類型參數defaultValue。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章