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