代码块

268 阅读2分钟
  1. 代码块的作用
    • 初始化对象和类
  2. 代码块如果有修饰的话只能用static
    • 静态代码块:static修饰
    • 非静态代码块
  3. 静态代码块
    • 内部可以有输出语句。
    • 随着类加载而执行,且只执行一次。
    • 一个类中定义多个静态代码块,按照声明先后顺序执行。
    • 静态代码块优先与非静态代码块执行。
    • 只能调用静态属性、静态方法。
    • 作用:初始化类的信息,就是说对静态的属性重新赋值。
  4. 非静态代码块
    • 内部可以有输出语句。
    • 随着对象的创建而调用,每创建一个对象就会执行一次。
    • 一个类中定义多个非静态代码块,按照声明先后顺序执行。
    • 能调用静态属性、静态方法。也可以调用非静态属性、非静态方法。
    • 作用:创建对象时,对对象属性等初始化。
public class test {
    public static void main(String[] args) {
        String speak = Person.speak;
        System.out.println("-------------分割线---------------");
        Person p1 = new Person();
    }
}

class Person {
    // 静态属性
    static String speak = "speak";

    // 静态方法
    public static void walk() {
        System.out.println("静态方法被调用:" + speak);
    }

    // 静态代码块
    static {
        System.out.println("静态代码块调用静态属性:" + speak); // 静态代码块调用静态属性
        walk(); // 静态代码块调用静态方法
    }

    // 非静态属性
    String eat = "eat";

    // 非静态方法
    public void run() {
        System.out.println("非静态方法被调用:" + eat);
    }

    // 非静态代码块
    {
        System.out.println("非静态代码块调用静态属性:" + speak);
        System.out.println("非静态代码块调用非静态属性:" + eat);
        walk();
        run();
    }
}

结果:

静态代码块调用静态属性:speak
静态方法被调用:speak
-------------分割线---------------
非静态代码块调用静态属性:speak
非静态代码块调用非静态属性:eat
静态方法被调用:speak
非静态方法被调用:eat