我的代码:
(导致堆栈溢出错误)
public class Overloads {
String uniqueID;
Overloads ov2=new Overloads();
public static void main(String[] args) {
System.out.println("IN MAIN");
}
public void setUniqueID(String theID) {
// II lots of validation code, and then:
uniqueID = theID;
System.out.println(uniqueID);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码工作正常:
public class Overloads {
String uniqueID;
public static void main(String[] args) {
Overloads ov2=new Overloads();
System.out.println("IN MAIN");
}
public void setUniqueID(String theID) {
// II lots of validation code, and then:
uniqueID = theID;
System.out.println(uniqueID);
}
}
Run Code Online (Sandbox Code Playgroud)
Zav*_*ior 12
主要方法的存在与此无关.但是,声明变量的范围非常重要.
您是否了解了代码的第一个版本中发生的情况?
Create new instance of Overloads
-> ov2 = Create new instance of Overloads
-> ov2 = Create new instance of Overloads
-> ov2 = Create new instance of Overloads
Run Code Online (Sandbox Code Playgroud)
等等.变量ov2在类的范围内,因此只要实例化类的实例,它就会被初始化.这将永远不会终止,直到你的内存不足并导致堆栈溢出.使用调试器运行它以获得更清晰的视图.
代码的第二个版本仅Overloads在main方法的范围内实例化一个实例.因此,创建一个实例不会导致新创建的实例创建新实例,依此类推.
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |