zoukankan      html  css  js  c++  java
  • JAVA构造块和静态代码块

    构造块和静态代码块

    • 构造块:在类体中直接使用{}括起来的代码块(在方法体外)。 • 每创建一个对象都会执行一次构造块。
    • 静态代码块:使用static关键字修饰的构造块。 • 静态代码块随着类加载时执行一次。

    执行顺序

    • 先执行父类的静态代码块,再执行子类的静态代码块。 • 执行父类的构造块,执行父类的构造方法体。
    • 执行子类的构造块,执行子类的构造方法体。

    code--展示构造块和静态代码块的结构和运行顺序:

    public class BlockTest {

    // 当需要在执行构造方法体之前做一些准备工作时,则将准备工作的相关代码写在构造块中即可,比如:对成员变量进行的统一初始化操作
    {
    System.out.println("构造块!"); // (2)
    }

    // 静态代码块会随着类的加载而准备就绪,会先于构造块执行
    // 当需要在执行代码块之前随着类的加载做一些准备工作时,则编写代码到静态代码块中,比如:加载数据库的驱动包等
    static {
    System.out.println("#####################静态代码块!"); // (1)
    }

    // 自定义构造方法
    public BlockTest() {
    System.out.println("====构造方法体!"); // (3)
    }

    public static void main(String[] args) {

    BlockTest bt = new BlockTest();


    BlockTest bt2 = new BlockTest();
    }
    }

    运行结果:

    code ----父类和子类静态代码块、构造块、静态方法的调用顺序:

    public class SuperTest {

    {
    System.out.println("SuperTest类中的构造块!"); // (2) c
    }

    static {
    System.out.println("SuperTest类中的静态代码块!"); // (1) a
    }

    public SuperTest() {
    System.out.println("SuperTest类中的构造方法体!"); // (3) d
    }

    public static void main(String[] args) {

    // 使用无参方式构造对象
    SuperTest st = new SuperTest();
    }
    }

    public class SubSuperTest extends SuperTest {

    {
    System.out.println("==========SubSuperTest类中的构造块!"); // (2) e
    }

    static {
    System.out.println("==========SubSuperTest类中的静态代码块!"); // (1) b
    }

    public SubSuperTest() {
    System.out.println("==========SubSuperTest类中的构造方法体!"); // (3) f
    }

    public static void main(String[] args) {

    // 使用无参方式构造子类的对象
    SubSuperTest sst = new SubSuperTest();
    }
    }


  • 相关阅读:
    这里下载QT速度飞快QT下载(多种下载通道+所有版本)
    一个查找窗口和子窗口的MFC类
    office 2007 安装和激活
    kafaka安装和使用及分析
    flume安装和使用
    Hbase的使用和分析
    Nginx源码安装
    hadoop集群下安装hive
    hadoop集群(完全分布式)下hbase的安装和配置
    linux下时区设置和时间同步
  • 原文地址:https://www.cnblogs.com/goldenwangyi/p/15031643.html
Copyright © 2011-2022 走看看