您的位置:首页 > 编程语言 > Java开发

Java代码块执行顺序

2015-09-08 12:44 169 查看
Java中静态代码块、构造代码块、构造方法代码块、父子类代码块之间执行顺序及代码示例

1、静态代码块

public class HelloA {

public HelloA() {
System.out.println("constructor A...");
}

//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("I'm A class");
}
//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
//静态代码块
static {
System.out.println("static A");
}
public static void main(String[] args) {

}
}


运行结果:

static A
2、构造代码块、构造方法

public class HelloA {

public HelloA() {
System.out.println("constructor A...");
}

//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("I'm A class");
}
//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
//静态代码块
static {
System.out.println("static A");
}
public static void main(String[] args) {
HelloA helloA = new HelloA();
}
}


运行结果:

3、main主方法代码

public class HelloA {

public HelloA() {
System.out.println("constructor A...");
}

//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("I'm A class");
}
//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
//静态代码块
static {
System.out.println("static A");
}
public static void main(String[] args) {
System.out.println("main start");
HelloA helloA = new HelloA();
System.out.println("main end");
}
}


运行结果:

static A
main start
I'm A class
constructor A...
main end


4、子类和父类的代码块

public class HelloB extends HelloA {

private static String  str = "1";

public HelloB() {
System.out.println("constructor B...");
}
//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("I'm B class");
}
//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
//静态代码块
static {
System.out.println("static B");
}

/**
* 代码块的执行顺序:静态代码块->main方法的代码->构造代码块->构造方法->顺序执行代码(或同步代码块)
* 继承类代码块的执行顺序:父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块)
* @param args
*/
@SuppressWarnings("unused")
public static void main(String[] args) {

System.out.println("main method start");
HelloB helloB = new HelloB();
System.out.println("main method end");

//同步代码块
synchronized(str){
System.out.println("同步代码块:" + str);
}
//普通代码块
{
int x = 10;
System.out.println("普通代码块x=" + x);
}

}

}


运行结果:

static A
static B
main method start
I'm A class
constructor A...
I'm B class
constructor B...
main method end
同步代码块:1
普通代码块x=10


5、总结:

代码块的执行顺序:静态代码块->main方法的代码->构造代码块->构造方法->顺序执行代码(或同步代码块)

继承类代码块的执行顺序:父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: