簡體   English   中英

由相同類型的非靜態成員引起的StackOverflowError

[英]StackOverflowError caused by non-static member of same type

以下代碼段中的代碼引發java.lang.StackOverflowError

public class Main
{
    private Main m=new Main("");  //This statement causes the exception.

    private Main(String s)
    {
        System.out.println(s);
    }

    public static void main(String[] args)
    {
        try
        {
            Main m1=new Main("The constructor called.");
            System.out.println("Successful!");
        }
        catch (Exception ex)
        {
            System.out.println(ex);
        }
    }
}

故意將這個語句寫成private Main m=new Main("");沒有意義private Main m=new Main(""); 在類本身內部,但是該語句永遠不會被類中的任何代碼使用,那么該語句如何導致引發異常?

每次調用構造函數時,都會創建一個實例,從而執行初始化代碼

private Main m=new Main("");

調用構造函數等

你可能想要

private static Main m=new Main("");

為了保持單身。

程序會導致堆棧溢出是絕對正常的……編譯器不會檢查代碼中是否使用了成員m,盡管您說對了,但它可能已經這樣做了,可能會有副作用:沒有生成對象。 ..為了構造一個Main對象,必須構造另一個Main對象(私有Main m成員)...,它給出無限遞歸,因此堆棧oveflow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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