当前位置: 代码迷 >> J2SE >> 静态块有关问题
  详细解决方案

静态块有关问题

热度:120   发布时间:2016-04-24 13:16:05.0
静态块问题
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);           }        }
------解决方案--------------------
可以进行多练习就好了!
------解决方案--------------------
  相关解决方案