我有一個java類「SampleA」。 「SampleA」怎麼知道它的超類是Object?一個類如何知道它的超類是Object?
這裏是我的答案,
在開發過程中,JRE的Eclipse中的配置將自動說,每個類都有超一流的「對象」
在部署過程中,類加載器取說超級班是「對象」的責任。
請糾正我。
我有一個java類「SampleA」。 「SampleA」怎麼知道它的超類是Object?一個類如何知道它的超類是Object?
這裏是我的答案,
在開發過程中,JRE的Eclipse中的配置將自動說,每個類都有超一流的「對象」
在部署過程中,類加載器取說超級班是「對象」的責任。
請糾正我。
在編譯過程中,如果未指定超類,它將被設置爲java/lang/Object
。爲了澄清,這將是完全一樣的,如果你已經宣佈以班級爲擴展對象:
public class Example extends Object {
}
所有的編譯器是充當節省時間,這意味着你不必寫在上面每類,就是這樣。
爲了支持這一點,在執行過程中ClassLoading的驗證過程將檢查所有的類肯定是有超類。除了沒有超類的java/lang/Object
這個例外。
JRE是運行時,Classloaders在運行期間進入畫面。每個對象都是指類信息。按照JLS的默認超類是java.lang.Object。你可以在java中使用'reflection'來找出類的層次結構。
編譯時,編譯器會判斷你的類是否使用擴展了關鍵字。如果不是將設置你的類作爲擴展java.lang.Object繼承
您可以通過使用帶有JDK
的javap工具編譯類之後檢查這些您也可以使用此代碼我已經嘗試:
public class Example {
public static void main(String[] args) {
Example obj = new Example();
obj.getSuperClassName();
}
public void getSuperClassName() {
Class cls = this.getClass();
System.out.println(cls.getSuperclass());
}
}
輸出:
class java.lang.Object
這並不回答這個問題,只是證明了這一點。 – Jivings 2012-03-28 11:53:28
@Jivings所以讀我的第一句話「你也可以」在那裏。 – 2012-03-28 12:04:52
我假設日在你問這個類本身如何能夠在運行時找出它自己的超類是什麼。
方法如下:
public class Sample .... {
private boolean extendsObject() {
return this.getClass().getSuperclass() == Object.class;
}
如果答案的人幫助,那麼你還記得將其標記爲正確答案。 – Jivings 2012-03-31 09:31:47