public class aa
{
public static void main(String[] args)
{
xx a = new xx();
a.getC();
System.out.println("dd");
}
}class xx
{
xx ekao = new xx();//这里不加static修饰会报java.lang.StackOverflowError Exception public xx()
{
System.out.println("ok");
}
public void getC()
{
System.out.println("bb");
}
}这是为什么?谢谢
{
public static void main(String[] args)
{
xx a = new xx();
a.getC();
System.out.println("dd");
}
}class xx
{
xx ekao = new xx();//这里不加static修饰会报java.lang.StackOverflowError Exception public xx()
{
System.out.println("ok");
}
public void getC()
{
System.out.println("bb");
}
}这是为什么?谢谢
解决方案 »
- 老师要求做一个日期查询,不知道有没错误。
- java计算器的小问题...连续运算
- 一个字符串的小问题~!!!
- java中如何传递鼠标消息啊?从子panel传递鼠标点击到父panel
- test
- 一般什么程序用java se开发?
- 定义一个交通灯枚举,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法,例如:红灯获取下一个灯是绿灯,绿灯获取下一个灯是黄灯。
- repaint() 执行后,是先调用paint()还是update()
- jbuilder5如何加入程序主图标???
- 我还是不知道如何在JB中调试helloworld程序,写在application中,运行出来只有一个空白板啊
- 使用ClassLoader读取jar包内的文件
- java为什么运行之后控件不出来,而最大化之后才出来
你在类的方法外直接实例化类而不加static声明它为静态的,当然会导致StackOverflowError异常 因为你在 new xx(); 的时候实际上是在调用XX构造函数,通过反编译可看出它实际执行的代码,如下: Class xx{
public xx(){
a= new xx();
}
} 在构造函数中是调用init()方法的,你将类本身放在构造函数中,它就会不断的调用init,最终导致 StackOverflowError异常,但如果声明为static它就不会调用init,放在方法体中也行(构造函数除外)