给你写了个类:
class TestXX{
public static String a="我是静态变量";
public String b ="定义a时a的值先为默认值null,然后被赋值“我是静态变量”,b和a一样";
public TestXX(){}
public TestXX(String b){
this.b=b;
System.out.println("这是通过构造函数进行初始化");
}
{
a ="静态变量在构造代码块-中初始化";
b ="成员变量在构造代码块-中初始化";
System.out.println(a+"--->");
System.out.println(b+"--->");
}
static {
a="静态变量在静态代码块---中初始化";
//b ="成员变量在静态代码块---中初始化";
System.out.println(a);
}
public static void main(String []args){
TestXX tx=new TestXX("我是传入的参数b");
System.out.println("a最终结果--->"+a+",b的最终结果--->"+tx.b);
}
}
运行结果:
静态变量在静态代码块---中初始化
静态变量在构造代码块-中初始化--->
成员变量在构造代码块-中初始化--->
这是通过构造函数进行初始化
a最终结果--->静态变量在构造代码块-中初始化,b的最终结果--->我是传入的参数b
可见:成员变量的赋值过程,首先声明时就能给他赋值,再通过构造代码块进行赋值,最后通过构造函数传参数进行初始化,意思就是你至少有三种方式可以对成员变量进行初始化工作。
静态变量则还可以通过静态代码块进行赋值,看代码中注释的语句,成员变量是无法在静态代码块中进行初始化的,因为静态变量先于对象的存在而存在。
|