簡體   English   中英

如何在java中編譯Object類的toString()方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM