Java代码块执行顺序

代码块定义:使用 { } 定义的一段代码

根据代码块定义的位置以及关键字,可分为以下四种:

  • 普通代码块
  • 构造代码块
  • 静态代码块
  • 同步代码块

1.普通代码块

普通代码块:定义在方法中的代码块

一般如果方法中代码过长,为避免变量重名,使用普通代码块。

public class Test{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x = " +x);
}
int x = 100 ;
System.out.println("x = " +x);
}
}

2.构造代码块

构造块:定义在类中的代码块(不加修饰符)

构造块可以进行简单的逻辑操作(在调用构造方法前)

class Person{
{ //定义在类中,不加任何修饰符,构造块
System.out.println("1.Person类的构造块");
}
public Person(){
System.out.println("2.Person类的构造方法");
}
}
public class Test{
public static void main(String[] args) {
new Person();
new Person();
}
}

运行结果:
1.Person类的构造块
2.Person类的构造方法
1.Person类的构造块
2.Person类的构造方法

通过以上代码我们发现:构造块优先于构造方法执行,每产生一个新的对象就调用一次构造块

3.静态代码块

静态代码块:使用static定义的代码块

静态块的主要作用是为static属性进行初始化
根据静态块所在的类的不同又可分为以下两种类型

  • 在非主类中
  • 在主类中

1)在非主类中的静态代码块

class Person{
{ 
System.out.println("1.Person类的构造块");
}
public Person(){
System.out.println("2.Person类的构造方法");
}
static { //定义在非主类中的静态块
System.out.println("3.Person类的静态块");
}
}
public class Test{
public static void main(String[] args) {
System.out.println("--start--");
new Person();
new Person();
System.out.println("--end--");
}
}

运行结果:
--start--
3.Person类的静态块
1.Person类的构造块
2.Person类的构造方法
1.Person类的构造块
2.Person类的构造方法
--end--

通过以上代码我们可以发现:

  1. 静态块优先于构造块执行。
  2. 无论产生多少实例化对象,静态块都只执行一次

2)在主类中的静态代码块

public class Test{
{
System.out.println("1.Test的构造块");
}
public Test(){
System.out.println("2.Test的构造方法");
}
static{
System.out.println("3.Test的静态块");
}
public static void main(String[] args) {
System.out.println("--start--");
new Test();
new Test();
System.out.println("--end--");
}
}

运行结果:
3.Test的静态块
--start--
1.Test的构造块
2.Test的构造方法
1.Test的构造块
2.Test的构造方法
--end--

通过以上代码我们发现:

在主类中定义的静态块,优先于主方法(main)执行

4.同步代码块

 

猜你喜欢

转载自blog.csdn.net/Racheil/article/details/88617227
今日推荐