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

静态块问题
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); 
 
  }  
}
编译成功不.输出多少.为什么.
关于静态变量.静态块.不静态块.常量.构造方法有人能讲的清楚些吗


------解决方案--------------------
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);
  

}
------解决方案--------------------
运行一下下面的程序,就会对这些的执行顺序了解了。

Java code
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;
    }    
}

------解决方案--------------------
第一个问是输出0

第二个是1

1.所有静态的(无论其是变量还是块)都按顺序执行.

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

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

------解决方案--------------------
Java code
public   class   test{    

static{
        i=1;
        }        
static   int   i=0;
        public   static   void   main(String   args[]){        
                      System.out.println("i="+i);  
 
        }        
}

------解决方案--------------------
可以进行多练习就好了!
------解决方案--------------------