日期:2014-05-20 浏览次数:20702 次
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方法就是访问这个静态变量。
------解决方案--------------------
public class test{ static{ i=1; } static int i=0; public static void main(String args[]){ System.out.println("i="+i); } }
------解决方案--------------------
可以进行多练习就好了!
------解决方案--------------------