通过一个简单的例子就可以看出来了
class Test {
// 静态代码块1
static {
System.out.println("我是静态代码块1");
}
// 构造代码块1:
{
System.out.println("我是构造代码块1");
}
// 构造函数1
public Test() {
System.out.println("我是无参构造函数");
}
// 构造函数2
public Test(int t) {
System.out.println("我是带参构造函数," + "参数是" + t);
}
// 静态代码块2
static {
System.out.println("我是静态代码块2");
}
// 构造代码块2:
{
System.out.println("我是构造代码块2");
}
}
创建一下这个类
System.out.println("创建第一个对象:");
Test test1 = new Test();
System.out.println("");
System.out.println("创建第二个对象:");
Test test2 = new Test(5);
输出结果为:
创建第一个对象:
我是静态代码块1
我是静态代码块2
我是构造代码块1
我是构造代码块2
我是无参构造函数
创建第二个对象:
我是构造代码块1
我是构造代码块2
我是带参构造函数,参数是5
可以看出执行顺序为静态代码块-构造代码块-构造函数。并且静态代码块只在类加载进内存的时候运行一次。
这里加载进内存只是代表new方法或newInstance方法,目前对jvm还不了解,所以其他情况暂时不予深究。
日后在战。