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()方法 > 父类实例块 > 父类构造方法 > 子类实例块 > 子类构造方法

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值