class Nerbo
{
void nbo()
{
System.out.println("hehe");
}
}public class Temp extends Nerbo
{
//Temp exa =new Temp();
void tmp()
{
Temp exa =new Temp();
exa.nbo();
}
public static void main(String []agrs)
{
Temp tmpMain =new Temp();
tmpMain.tmp();
}
}Temp exa =new Temp();放在tmp()方法内可以正常得出结果。如果放在//注释位置则会出问题。这是什么原因造成的?谢谢
{
void nbo()
{
System.out.println("hehe");
}
}public class Temp extends Nerbo
{
//Temp exa =new Temp();
void tmp()
{
Temp exa =new Temp();
exa.nbo();
}
public static void main(String []agrs)
{
Temp tmpMain =new Temp();
tmpMain.tmp();
}
}Temp exa =new Temp();放在tmp()方法内可以正常得出结果。如果放在//注释位置则会出问题。这是什么原因造成的?谢谢
写成static的就可以了。
构造的粗略过程如下
1、分配对象空间,并将对象中成员初始化为0或者空,java不允许用户操纵一个不定值的对象。
2、执行属性值的显式初始化(这里有一点变化,一会解释,但大体是这样的)
3、执行构造器
4、将变量关联到堆中的对象上构造器中一定不要创建自身的实例,否则会造成调用栈溢出错误。这个规则也适用于对象的实例变量,如果对象中有自身的引用,这个引用一定不能在定义中或者构造器中初始化。class a
{
a _a = new a();public a()
{
_a = new a();
a _b = new a();
}
}以上三种情况都会造成栈溢出,呵呵,这样会造成一个无穷递归的调用栈