目录
本篇文章将介绍关于java中的代码运行的顺序
代码块的分类与概念
使用 {} 定义的一段代码称为代码块。
根据代码块定义的位置以及关键字,又可分为以下四种:
- 普通代码块
- 构造块
- 静态块
- 同步代码块(在此不做阐述)
普通代码块
普通代码块也叫局部代码块
public class Main{
public static void main(String[] args) {
//直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
int x = 100 ;
System.out.println("x2 = " +x);
}
}
// 执行结果
x1 = 10
x2 = 100
局部代码块中声明的变量在代码块外部访问不到!(进入时创建,出该区域时销毁)
构造代码块
定义在类中的代码块(不加修饰符)。也叫:
实例代码块。构造代码块一般用于初始化实例成员变量。
class Person {
public int age;
public String name;
public Person() {
System.out.println("构造方法执行");
}
{
age = 18;
name = "张三";
System.out.println("实例块执行");
}
}
public class LeiLearn {
public static void main(String[] args) {
Person a = new Person();
System.out.println(a.name+" "+a.age);
}
}
//运行结果
实例块执行
构造方法执行
张三 18
我们会发现即使实例块代码在构造方法之后也会优先执行
class Person {
public int age;
public String name;
public Person() {
System.out.println("无参构造方法执行");
}
public Person(int age,String name) {
this.age = age;
this.name = name;
System.out.println("有参构造方法执行");
}
{
age = 18;
name = "张三";
System.out.println("实例块执行");
}
}
public class LeiLearn {
public static void main(String[] args) {
Person a = new Person();
System.out.println(a.name+" "+a.age);
System.out.println("==============");
Person b = new Person(28,"李四");
System.out.println(b.name+" "+b.age);
}
}
//执行结果
实例块执行
无参构造方法执行
张三 18
==============
实例块执行
有参构造方法执行
李四 28
在上述代码中我们发现每次调用构造方法都会执行,并且在构造方法前执行。
静态代码块
使用static定义的代码块称为静态代码块。
一般用于初始化静态成员变量。
class Person {
public int age;
public String name;
public static int grades;
public Person() {
System.out.println("无参构造方法执行");
}
public Person(int age,String name) {
this.age = age;
this.name = name;
System.out.println("有参构造方法执行");
}
{
age = 18;
name = "张三";
System.out.println("实例块执行");
}
static {
grades = 100;
System.out.println("静态块执行");
}
}
public class LeiLearn {
public static void main(String[] args) {
Person a = new Person();
System.out.println(a.name+" "+a.age+" "+Person.grades);
System.out.println("==============");
Person b = new Person(28,"李四");
System.out.println(b.name+" "+b.age+" "+Person.grades);
}
}
//运行结果
静态块执行
实例块执行
无参构造方法执行
张三 18 100
==============
实例块执行
有参构造方法执行
李四 28 100
必须有static修饰,必须放在类下。与类一起加载执行。并且静态代码块执行一次
注意事项
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
- 实例代码块只有在创建对象时才会执行
总结
父类静态代码块 > 子类静态代码块 > main()方法 > 父类实例块 > 父类构造方法 > 子类实例块 > 子类构造方法
版权声明:本文为weixin_67120523原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。