class pj35 {
static int i=peek();//(1)
//static int i=j;/////(2)
static int peek(){
return j;
}
static int j=98;
static int t=j;
    public static void main(String [] args){
pj35 pj=new pj35();
System.out.println(pj.i);//i==0;(3)
}
}
在这个类中,(2)式是不能通过编译,这似乎很好理解,但对于(1)的正确,以及(1)和(2)
的区别,就不理解了,在(3)式中i的值还是0??想了想动态绑定的机制,可还是觉得不是很信服,在此请教,谢谢

解决方案 »

  1.   

    因为Java是按顺序初始化的
    所以在执行(1)的时候,j的值还是0
    直到static int j=98;   j的值才变成98,但是这个时候i已经初始化完了,i的值已经固定成0了
      

  2.   

    int类型的null值是0,初始化时static先初始化,调用peek,此时peek返回0,所以i被初始化为0
      

  3.   

    To:ChDw(米)
    我想楼主主要是问static int i=peek();//(1)
    //static int i=j;/////(2)
    这个吧?为什么能先调用方法,而不能如(2)那样
      

  4.   

    在类中
    int i=j;
    int j=2;这样是不能通过编译的,
    为什么象(1)那样能不先声明方法而调用之呢?
      

  5.   

    在static{}中可以做初始化的动作,但不能向前引用。
      

  6.   

    在static{}中可以做初始化的动作,但不能向前引用
    这个说法没错,可和这个题没关系啊,
      

  7.   

    static 方法和它被调用的位置没关系吧!learning~~