原址:http://wiki.jikexueyuan.com/project/java-enhancement/java-twelve.html
package com.tutorialspoint;
public class Test {
/**
* 构造代码
*/
{
System.out.println("执行构造代码块...");
System.out.println("222222");
}
/**
* 无参构造函数
*/
public Test(){
System.out.println("执行无参构造函数...");
}
/**
* 有参构造函数
* @param id id
*/
public Test(String id){
System.out.println("执行有参构造函数...");
}
public static void main(String[] args) {
new Test();
System.out.println("----------------");
new Test("1");
}
}
Test.class
编译后的:
public class Test
{
public Test()
{
System.out.println("执行构造代码块...");
System.out.println("222222");
System.out.println("执行无参构造函数...");
}
public Test(String id)
{
System.out.println("执行构造代码块...");
System.out.println("222222");
System.out.println("执行有参构造函数...");
}
public static void main(String[] args) {
new Test();
System.out.println("----------------");
new Test("1");
}
}
结论1:
从上面的运行结果可以看出在 new 一个对象的时候总是先执行构造代码,再执行构造函数,但是有一点需要注意构造代码不是在构造函数之前运行的,它是依托构造函数执行的。
五、 静态代码块、构造代码块、构造函数执行顺序
从词面上我们就可以看出他们的区别。
1)静态代码块,静态,其作用级别为类,
2)构造代码块、构造函数,构造,其作用级别为对象。
1、静态代码块,它是随着类的加载而被执行,只要类被加载了就会执行,而且只会加载一次,主要用于给类进行初始化。
2、构造代码块,每创建一个对象时就会执行一次,且优先于构造函数,主要用于初始化不同对象共性的初始化内容和初始化实例环境。
3、构造函数,每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。
通过上面的分析,他们三者的执行顺序应该为:静态代码块 > 构造代码块 > 构造函数。
package com.tutorialspoint;
public class Test {
/**
* 静态代码块
*/
static{
System.out.println("执行静态代码块开始");
System.out.println("==============");
System.out.println("执行静态代码块结束");
}
/**
* 构造代码
*/
{
System.out.println("执行构造代码块...");
}
/**
* 无参构造函数
*/
public Test(){
System.out.println("执行无参构造函数...");
}
/**
* 有参构造函数
* @param id id
*/
public Test(String id){
System.out.println("执行有参构造函数...");
}
public static void main(String[] args) {
new Test();
System.out.println("----------------");
new Test("1");
}
}
执行静态代码块开始
==============
执行静态代码块结束
执行构造代码块...
执行无参构造函数...
----------------
执行构造代码块...
执行有参构造函数...