爲什麼要用反射
Java程序中的許多對象在運行時都會出現兩種類型:編譯時類型和運行時類型,例如代碼:Person p = new Student();,這行代碼將會生成一個p變量,該變量的編譯時類型爲Person,運行時類型爲Student;除此之外,還有更極端的情形,程序在運行時接收到外部傳入的一個對象,該對象的編譯時類型是Object,但程序又需要調用該對象運行時類型的方法。
爲了解決這些問題,程序需要在運行時發現對象和類的真實信息。解決該問題有以下兩種做法。
第一種做法:假設在編譯時和運行時都完全知道類型的基本信息,在這種情況下,可以先使用instanceof運算符進行判斷,再利用強制類型轉換將其轉換成其運行時類型的變量即可。
第二種做法:編譯時根本無法預知該對象和類可能屬於哪些類,程序只依靠運行時信息來發現該對象和類的真實信息,這就必須使用反射。