Java代码块

Posted guhun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java代码块相关的知识,希望对你有一定的参考价值。

一、静态代码块

  • 里面可以有输出语句
  • 随着类的加载而加载,而且只被加载一次
  • 多个静态代码块之间按照顺序结构执行
  • 静态代码块的执行要早于非静态代码块的执行。
  • 静态的代码块中只能执行静态的结构(类属性,类方法)

二、非静态代码块

  • 可以对类的属性(静态的 & 非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的 & 非静态的)
  • 里面可以有输出语句
  • 一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行
  • 每创建一个类的对象,非静态代码块就加载一次
  • 非静态代码块的执行要早于构造器

      注意:代码块如果有修饰的话,那么只能使用static

package com.yyx.pratice;

class Root {
    static {
        System.out.println("Root的静态初始化块");
    }
    {
        System.out.println("Root的普通初始化块");
    }

    public Root() {
        System.out.println("Root的无参数的构造器");
    }
}

class Mid extends Root {
    static {
        System.out.println("Mid的静态初始化块");
    }
    {
        System.out.println("Mid的普通初始化块");
    }

    public Mid() {
        System.out.println("Mid的无参数的构造器");
    }

    public Mid(String msg) {
        // 通过this调用同一类中重载的构造器
        this();
        System.out.println("Mid的带参数构造器,其参数值:" + msg);
    }
}

class Leaf extends Mid {
    static {
        System.out.println("Leaf的静态初始化块");
    }
    {
        System.out.println("Leaf的普通初始化块");
    }

    public Leaf() {
        // 通过super调用父类中有一个字符串参数的构造器
        super("尚硅谷");
        System.out.println("执行Leaf的构造器");
    }
}

public class TestLeaf {
    public static void main(String[] args) {
        new Leaf();
        System.out.println();
        new Leaf();
    }
}

运行结果:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:尚硅谷
Leaf的普通初始化块
执行Leaf的构造器

Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:尚硅谷
Leaf的普通初始化块
执行Leaf的构造器
















以上是关于Java代码块的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 快速开发 代码块

Java异常处理机制

Xcode 快速开发 代码块 快捷键

java 为啥要实现 function?

编写高质量代码:改善Java程序的151个建议(第3章:类对象及方法___建议36~40)

<code> vs <pre> vs <samp> 用于内联和块代码片段