![](/img/trans.png)
[英]How java.util.function.Function can have a method reference of Object class toString method
[英]How is the toString() method of Object class compiled in java?
Object類是每個類的基類,即每個類都擴展Object類。 Object類中有一個公共的String toString()方法,並且String類中也存在相同的方法。 現在,String類還擴展了Object類,方法toString返回String類型。
我的問題是:在編譯Object類時,它將搜索String.class,String類將搜索Object.class,從而創建一種相互依賴性。 如何解決這種依賴? 編譯機制如何工作? 如果我錯了,請糾正我。
Java編譯器是Multi-Pass編譯器 。 這意味着編譯過程中有增量步驟。 在編譯Object
,它使用String
的臨時表示,以便允許Object
進行編譯。
您可以將臨時表示與某種隱藏接口進行比較。 編譯器編譯到該接口。 只有在運行時,編譯的部分才會聚集在一起 - 編譯器不需要一個完全編譯的類來編譯另一個類,只需要對它進行抽象。
實際上,當你寫這樣的代碼時:
public class Class1
{
public Class2 giveClass2()
{
return new Class2();
}
}
public class Class2 : Class1 { }
它正確編譯,因為它沒有實例化任何東西。 編譯器只檢查您使用的類型是否已定義。
但是,如果你寫如下:
public class Class1
{
public Class1(){
aClass2 = new Class2();
}
public Class2 aClass2;
}
public class Class2 : Class1
{
}
這也將被編譯,但它會在運行時導致堆棧溢出,因為這會影響循環依賴性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.