天天看點

如何防止覆寫(override)toString方法時産生遞歸調用

 在Java中任何對象都繼承于Object類,是以,每個類都有一個toString方法用于傳回目前對象的字元串形式(可能是對象位址或其他和對象相關的資訊)。在每個類中也可以覆寫toString方法以傳回自定義的字元串。如下面的代碼将以一定的格式傳回對象的位址:

package string;

public class InfiniteRecursion

{

    public String toString()

    {

        return "address:" + this;

    }

    public static void main(String[] args)

        System.out.println(new InfiniteRecursion().toString());

}

如果運作上面的程式,将抛出StackOverflowError異常,這說明程式的工作棧溢出了。導緻這種情況最常見的錯誤就是無限遞歸。這們發現在toString中使用this來傳回對象的位址,如果這樣調用,将會無限調用InfiniteRecursion類的toString方法。如果要避免這種情況的出現,要将toString改成如下的形式:

public String toString()

    return "address:" + super.toString();

    也就是說,不能再調用目前類的toString方法,必須調用目前類父類的toString方法才能傳回正确的結果。