为什么“ static int a=1;
static int c=a;
static String b="asdf";
static String d=b;”编译可以通过
而“ int a=1;
static int c=a;
String b="asdf";
static String d=b;”就不可以呢?
简单说静态变量为什么不能接受非静态变量的赋值啊?而可以接受常量的赋值呢?

解决方案 »

  1.   

    static 的变量是在类加载的时候就初始化了,
    而“ int a=1;
    static int c=a;也就是说static int c=a; 初始化的时候,int a=1还没有初始化,就相当于 a 还没有定义,所以报错
      

  2.   

    为什么“ static int a=1;
    static int c=a;
    static String b="asdf";
    static String d=b;”编译可以通过以上操作 是因为 a是static的,在类加载的时候已经有分配内存空间了,而 c也是static的 ,由于a在c前面定义 ,所以 a比c早初始化,即早分配内存空间,所以不会报错  
    而“ int a=1;
    static int c=a; //这里的a不是static的 ,在类加载的时候不会初始化,只有在new 一个对象实例的时候才初始化 ,而c是static的,在类加载的时候会初始化,而此时还没有new 对象实例,所以a是没有分配内存空间的,所以不对了,一定要理解 static的变量或方法 不可以访问非static的变量或方法, 而非static的变量或方法 可以访问 static的变量或方法String b="asdf";
    static String d=b;”就不可以呢?
    简单说静态变量为什么不能接受非静态变量的赋值啊?而可以接受常量的赋值呢?
    开这么多贴干什么啊 ?
      

  3.   

    就是说static的变量时优先于正常变量初始化