public class Stack 
{
    static{a=6;}
    static double a=3.234;
public static void main(String[] args)
{
    System.out.println(a);

}
这个怎么输出3.234。"static{a=6;}"怎么理解?

解决方案 »

  1.   

    顺序执行的
    源代码改为public class Stack {
    static double a = 3.234;//初始化语句
    static {//初始化块
    a = 6;
    } public static void main(String[] args) {
    System.out.println(a);
    }
    }打印结果为6.0结论: 按照类声明出现的次序,依次执行所有域初始化语句和初始化块
    域初始化语句和初始化块 平级的,谁在先,先执行谁
    所以 后面的会覆盖前面的
      

  2.   


    public class Tt {
    {
    a = 6;
    }
    double a = 3.234;
    public static void main(String[] args) {
    Tt tt = new Tt();
    System.out.println(tt.a);
    }
    }输出3.234
      

  3.   


    package test;public class Tt {
    double a = 3.234;
    {
    a = 6;
    } public static void main(String[] args) {
    Tt tt = new Tt();
    System.out.println(tt.a);
    }
    }输出6.0例子全了
    楼主懂了吗?
      

  4.   

    谢谢给位,这个问题懂了,还有个小问题“
         System.out.println(tt.a); 

         System.out.println(a); 
    有什么区别,运行上面那个是一样的。
      

  5.   

    static修饰的东西都要在构造函数之前执行,并只执行一次!
      

  6.   

    a表示this.a,和 tt.a效果一样
    tt和this 指的是同一对象。
      

  7.   

    其实楼主还是对static关键字的作用认识不清
      

  8.   

    用static修饰的属性 可以直接类.属性名调用
      

  9.   

    static修饰的东西都要在构造函数之前执行,并只执行一次!