public class test{  

static{
     i=1;
    }    
static int i=0;
    public static void main(String args[]){    
           System.out.println("i="+i); 
 
    }    
}
编译成功不.输出多少.为什么.
public class test{  
static int i=0; static{
     i=1;
    }    
    public static void main(String args[]){    
           System.out.println("i="+i); 
 
    }    
}
编译成功不.输出多少.为什么.
关于静态变量.静态块.不静态块.常量.构造方法有人能讲的清楚些吗

解决方案 »

  1.   

    static{ 
            i=1; 
            }         
    static   int   i=0;  ~~~~~~~~~先使用后定义
    static   int   i=0;  ~~~~~~~~~~~main本来就是静态的
    static{ 
            i=1; 
       public   static   void   main(String   args[]){         
                          System.out.println("i="+i);   
              }     
      

  2.   

    好奇怪.class   StaticSec 

    static { 
      a=9; } 
    static int a;
    public   static   void   main(String[]   args) 

    System.out.println(a); 

    }输出9
    class   StaticSec 

    static { 
      a=9; } 
    static int a=0;
    public   static   void   main(String[]   args) 

    System.out.println(a); 

    }输出0,晕
      

  3.   

    运行一下下面的程序,就会对这些的执行顺序了解了。public class Test {
        public static void main(String[] args) {
            ABC abc = new ABC();
        }
    }class ABC {    
        private String str1 = getString("非静态成员变量1");
        private String str2 = getString("非静态成员变量2");
        private static String stra = getString("静态成员变量a");
        private static String strb = getString("静态成员变量b");    
        {
            System.out.println("非静态块1");
        }
        {
            System.out.println("非静态块2");
        }    
        static {
            System.out.println("静态块1");
        }
        static {
            System.out.println("静态块2");
        }
        public ABC() {
            System.out.println("构造方法");
        }
        private static String getString(String type) {
            System.out.println(type);        
            return type;
        }    
    }PS:静态块和静态方法一下,当中不能直接引用非静态的成员变量。
      

  4.   

    静态块和静态成员变量一样,无论生成多少个对象,它们总是在第一次被执行,
    接下来就不会再执行了,静态成员变量在各对象间是数据共享的。把Test改成
    如下,就可以看到效果了。public class Test {
        public static void main(String[] args) {
            ABC abc = new ABC();
            System.out.println("----------");
            ABC cba = new ABC();
            System.out.println("----------");
            ABC acb = new ABC();
        }
    }
      

  5.   

    第一个问是输出0第二个是11.所有静态的(无论其是变量还是块)都按顺序执行.2.所有的非静态的块都在静态的(无论其是变量还是块)后执行.3.所有的块(无论是静态的还是非静态的)都在构造之前执行.测试代码:(仅供参考)public class TestStaticMode
    {
        public TestStaticMode()
        {
            System.out.println("in structure");
        }
        static int i = 0;    {
            System.out.println("in first no static  i=" + i);
        }    static {
            i = 1;
            System.out.println("in static i=" + i);
        }    {
            System.out.println("in second no static  i=" + i);        
        }
        public static void main(String args[])
        {
            TestStaticMode testStaticMode = new TestStaticMode();
            System.out.println("i=" + i);    }
    }输出为:
    in static i=1
    in first no static  i=1
    in second no static  i=1
    mytest
    i=1
      

  6.   

    静态块:是指一个对象被构造时,最先被初始化的实例成员,这里指的是对象的实例变量。静态方法是无法访问的,以上的main方法是无法访问静态块的变量。
    静态变量:是指一个类被装载时,被装载的变量,它对所有的类来说,只有一个,该变量是可以静态方法所访问的,以上的main方法就是访问这个静态变量。
      

  7.   

    分析一下代码
    static {
     a = 9;
    }
    静态块,位置最前,最先执行 此时 a=9;下面2种情况

    static int a; 
    此处只是声明,没有赋值,所以a仍然是92 
    static int a=0;
    此处不仅声明,而且赋值,所以到这里,a是0啦我个人理解,static 变量在编译时,可能就已经预留了地址空间,也就是类一但加载,就会分配空间给他们。over
      

  8.   

    不好意思,刚才说错呢!静态变量:是指一个类被装载时,被装载的变量,它对所有的类来说,只有一个,该变量是可以静态方法所访问的,以上的main方法就是访问这个静态变量
    静态块:是指类第一次被装载时,对类的静态变量进行初始化的地方,不静态块:是指一个对象被构造时,最先被初始化的实例成员的地方,这里指的是对象的实例变量。静态方法是无法访问的,以上的main方法是无法访问静态块的变量。 常量:是指值在任何时候都不会被改变,它也分为静态与非静态。public   class   test{     static{ 
            i=1; 
            }//静态块         
    static   int   i=0; //这也是给静态变量赋值,但这个优先,因为在这个情况下,是按顺序的。
            public   static   void   main(String   args[]){         
                          System.out.println("i="+i);   
      
            }         

    这个输出为0,
      

  9.   

    public   class   test{    static{
            i=1;
            }        
    static   int   i=0;
            public   static   void   main(String   args[]){        
                          System.out.println("i="+i);  
     
            }        
    }
    为什么下面这段,i怎么可以直接被赋值?貌似还没有申请变量吧?
    static{
            i=1;
      

  10.   

    很怪啊.这样
    static{
            i=1;
          }        
    static   int   i=0;不会报错啊
    但是
    static{
            i+=1;
          }        
    static   int   i=0;就会报错啊.操他奶奶啊.怎么开发JAVA垃圾语言的
      

  11.   

    上面的怪问题.希望哪位说的清楚一些.
    static{ 
                    i=1; 
                }                 
    static       int       i=0;不会报错啊 
    但是 
    static{ 
                    i+=1; 
                }                 
    static       int       i=0;就会报错啊.