复制下面的代码,保存成TestSquence.java
执行javac TestSquence.java再执行java TestSquence
查看结果,static静态块里的内容要先于构造函数执行。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
public class TestSquence {
public static void main(String[] args) {
/*
* 给初学者的问题:把下面两行中的一行分别注释掉,输出结果会有什么变化?
*/
//String temp = TQExample.s_a;
TQExample test = new TQExample();
}
}
class TQExample {
/*
* 这个例子就想测试一下成员变量初始化的顺序,下面的域变量 的访问控制符一般不建议在实际开发中使用
*/
public static String s_a = "静态变量:直接赋值";
public String n_b = "非静态变量:直接赋值";
public final int nf_i;
public final String nf_s = "我是final对象,直接赋值";
static {
System.out.println(s_a);
s_a = "静态变量:静态块赋值";
}
static//静态块可以有多个。
{
System.out.println("s_a");
//s_a = "静态变量:静态块赋值";
}
public TQExample() {
System.out.println(s_a);
System.out.println(n_b);
//静态变量
s_a = "静态变量:构造器赋值";
//非静态变量
n_b = "非静态变量:构造器赋值";
//final变量
nf_i = 1;//注释这行然后在外面打印它看看看看,会对java的自动赋值有一个更具体的感性认识.
//nf_s = "我是final对象,构造器赋值";//这行是错误的,建议你试试.
System.out.println(s_a);
System.out.println(n_b);
System.out.println(nf_s);
}
}
我这个博客废弃不用了,今天想寻找外链的时候,突然想到这个博客权重很高。
有需要免费外链的,留言即可,我准备把这个博客变成免费的友情链接站点。