日期:2014-05-20  浏览次数:20711 次

在一个类里面创建一个自身对象,不会无限循环吗?
class Price{
static final Price P=new Price(2.7);
static double initPrice=20;
double currentPrice;
public Price(double discout){
currentPrice=initPrice-discout;
}
}
public class PriceTest {
public static void main(String[] args) {
System.out.println(Price.P.currentPrice); //输出-2.7

}

}

 例如这样,这样一来,P实例不是无限循环创建了吗?虽然我知道肯定不会无限循环,但是原理在哪里?虽然这样的写法很怪异,但是有助于理解java在底层的工作。

------解决方案--------------------
首先要弄清java对象的初始化过程。先是static变量,然后是static块,然后是普通变量,然后是构造器。
static final Price P=new Price(2.7)的时候,initPrice还没有被赋值20,所以默认为0。至于死循环的问题,是LZ多想了。
------解决方案--------------------
static变量是属于类的,不属于哪一个特定的对像。 只初始化一次。

去掉static修饰,就能看见死循环了。