JAVA中关于代码块运行顺序

  • Post author:
  • Post category:java



目录


代码块的分类与概念


普通代码块


构造代码块


静态代码块


总结


本篇文章将介绍关于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 版权协议,转载请附上原文出处链接和本声明。