日期:2014-05-20 浏览次数:20870 次
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);
}
}
------解决方案--------------------
可以进行多练习就好了!
------解决方案--------------------