Java代码块的使用

  • 1.代码块介绍
  • 2.代码块的基本使用
  • 3.静态代码块


1.代码块介绍

java CodeBlock 的用法 java可以用codeblocks_java

代码块的基本语法内容:

java CodeBlock 的用法 java可以用codeblocks_代码块_02


2.代码块的基本使用

在执行构造方法时,会首先加载代码块里面的内容

代码块调用的顺序优先于构造方法

/**
 * 代码块
 */
public class Codeblock {
    private String name;
    private double price;
    private String director;
    {
        System.out.println("屏幕打开!");
        System.out.println("广告开始!");
        System.out.println("开始播放!");
    }

    public Codeblock(String name) {
        this.name = name;
    }

    public Codeblock(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public Codeblock(String name, double price, String director) {
        this.name = name;
        this.price = price;
        this.director = director;
    }
}

测试类:

Codeblock shentan = new Codeblock("神探狄仁杰");
Codeblock lihuanying = new Codeblock("你好李焕英", 59.9);
--------------------------
输出:
屏幕打开!
广告开始!
开始播放!
屏幕打开!
广告开始!
开始播放!

当构造器存在冗余的时候,可以借助代码块有效减少冗余🍫


3.静态代码块

static代码块又叫静态代码块,作用就是对类进行初始化,随着类的加载而执行,且只会执行一次,而如果是普通代码块,每创建一个对象都会执行一次

那么,类什么时候会被加载呢?

  • 创建对象实例时
  • 创建子类对象实例,父类也会被加载(父类先被加载,子类后被加载)
  • 使用类的静态成员时

实例:

/**
 * 静态代码块
 */
public class CodeblockStatic {
    static {
        System.out.println("静态代码块执行~");
    }
}

测试:

CodeblockStatic c1 = new CodeblockStatic();
CodeblockStatic c2 = new CodeblockStatic();
----------------------
只会输出一个:
静态代码块执行~

要点注意:使用类的静态成员,普通代码块不会执行🍬

创建一个对象时,在一个类调用顺序是:

  1. 静态代码块和静态属性初始化(优先级一致,谁在前谁先执行)
public class CodeblockStatic {
    // 静态属性初始化
    private static int n = getN();
    static {
        System.out.println("静态代码块执行~");
    }
    public static int getN() {
        System.out.println("getN被调用");
        return 521;
    }
}
---------------------------------
输出:
getN被调用
静态代码块执行~
  1. 普通代码块和普通属性初始化(优先级一致,谁在前谁先执行)
  2. 调用构造方法
public class CodeblockStatic {
    {
        System.out.println("普通代码块执行~");
    }

    // 静态属性初始化
    private static int n = getN();

    static {
        System.out.println("静态代码块执行~");
    }

    public static int getN() {
        System.out.println("getN被调用");
        return 521;
    }

    public CodeblockStatic() {
        System.out.println("构造器执行~");
    }
}

测试:

CodeblockStatic c1 = new CodeblockStatic();
CodeblockStatic c2 = new CodeblockStatic();
----------------------------------
输出:
getN被调用
静态代码块执行~
普通代码块执行~
构造器执行~
普通代码块执行~
构造器执行~

存在继承关系的执行顺序:(面试高频真题)

java CodeBlock 的用法 java可以用codeblocks_jvm_03

静态代码块只可以调用静态成员,普通代码块可以调用任意成员🍭