Java的初始化块

三种初始化数据域的方法:

  • 在构造器中设置值
  • 在声明中赋值
  • 初始化块(initialization block)

初始化块

在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。

class Employee {
    private static int nextId;
    private int id;
    private String name;
    private double salary;

    // object initialization block
    {
        id = nextId;
        nextId++;
    }
}

在上面这个示例中,无论使用哪个构造器构造对象,id 域都在对象初始化块中被初始化。首先运行初始化块,然后才运行构造器的主体部分。

初始化块这种机制不是必需的,也不常见。通常会直接将初始化代码放在构造器中。


由于初始化数据域有多种途径,所以列出构造过程的所有路径可能相当混乱。下面是调用构造器的具体处理步骤:

  1. 所有数据域被初始化为默认值(0、false 或 null)
  2. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块
  3. 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
  4. 执行这个构造器的主体

静态的初始化块

可以通过提供一个初始化值,或者使用一个静态的初始化块来对静态域进行初始化。

前面已经介绍过第一种机制(提供一个初始化值):private static int nextId = 1;

如果对类的静态域进行初始化的代码比较复杂,那么可以使用静态的初始化块。将代码放在一个块中,并标记关键字 static。下面是一个示例。其功能是将雇员 ID 的起始值赋予一个小于 10000 的随机整数。

// static initialization block
static {
	Random generator = new Random();
	nextId = generator.nextInt(lOOOO);
}

在类第一次加载的时候,将会进行静态域的初始化。与实例域一样,除非将它们显式地设置成其他值,否则默认的初始值是 0、false 或 null。所有的静态初始化语句以及静态初始化块都将依照类定义的顺序执行。

参考资料

Java核心技术卷一:基础知识》(第10版)第 4 章:对象与类 4.6.7 初始化块

原文链接:https://www.cnblogs.com/feiyu2/p/17358150.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的初始化块 - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月27日

相关文章

  • Spring boot整合jsp和tiles模板示例

    当使用Spring Boot时,整合JSP和Tiles模板是非常简单的。下面是整合的完整攻略: 步骤1: 新建Spring Boot项目 首先,你需要创建一个新的Spring Boot项目。你可以在Spring Boot官网中创建一个新项目或者在Eclipse、IntelliJ IDEA等IDE中创建一个新的Spring Boot项目。 步骤2:配置pom.…

    Java 2023年6月15日
    00
  • Java线程使用同步锁交替执行打印奇数偶数的方法

    Java线程使用同步锁交替执行打印奇数偶数的方法,可以使用以下步骤: 使用一个共享变量来记录当前需要打印的数字。例如,初始化该变量为1,表示需要打印的是第一个奇数。 定义两个线程,一个奇数线程和一个偶数线程。奇数线程打印奇数,偶数线程打印偶数。 在线程中使用while循环,每次判断当前需要打印的数字是否超过了指定范围(比如100),如果超过则结束循环。如果未…

    Java 2023年5月18日
    00
  • 关于java方法区详解

    Java方法区详解 在Java虚拟机中,方法区是一块被线程共享的内存区域,用于存储类、常量、静态变量、即时编译器编译后的代码等数据。本文将详细介绍Java方法区的相关知识。 方法区的作用 方法区主要用于存储类相关的数据,具体包括以下内容: 1.类信息:类的完全限定名、父类的完全限定名、实现接口的完全限定名、类的修饰符等。 2.常量池:用于存储编译期生成的各种…

    Java 2023年5月20日
    00
  • java中DateUtils时间工具类详解

    Java中DateUtils时间工具类详解 介绍 Java中的Date类是处理日期和时间的基本工具类,常用方法比较有限。而DateUtils时间工具类则提供了更丰富的时间处理方法,方便对日期和时间进行各种操作。 在Java中使用DateUtils需要导入Apache的commons-lang3jar包。commons-lang3提供了很多常用的工具类,除了日…

    Java 2023年5月20日
    00
  • 关于在Java中使用预定义类

    在Java中,预定义类是指Java标准库中提前定义好的一组类,它们负责完成一些常见的任务,例如字符串操作、时间日期处理等。使用Java预定义类可以大大简化编程过程,提高代码的可读性和可维护性。下面是在Java中使用预定义类的攻略: 1. 导入预定义类 Java标准库中的预定义类已经被编译成Java API文档,可以直接使用。但是,在使用预定义类之前,需要导入…

    Java 2023年5月26日
    00
  • 详解SpringBoot配置连接池

    Spring Boot是一个快速创建Web应用程序的框架,它提供了许多便捷的功能和工具,其中包括连接池。连接池是一种管理数据库连接的技术,它可以提高应用程序的性能和可伸缩性。下面是详解Spring Boot配置连接池的完整攻略: 添加依赖项 首先,我们需要在pom.xml文件中添加连接池依赖项。Spring Boot支持多种连接池,包括HikariCP、To…

    Java 2023年5月14日
    00
  • java maven进阶教学

    Java Maven进阶教学攻略 Maven 是 Java 中最流行的构建工具之一,它可以自动化地管理和构建项目的依赖关系,允许开发人员专注于业务代码的开发。 安装 Maven Maven 的安装十分简单,只要在官网下载对应操作系统的二进制包,解压即可。详细步骤参考 Maven 安装指南: # 下载 Maven $ wget https://www-us.a…

    Java 2023年5月20日
    00
  • 云服务器(Linux)安装部署Kafka的详细过程

    云服务器(Linux)安装部署Kafka的详细过程 作为一种分布式消息系统,Kafka 可以快速处理大规模的实时数据。在云服务器中进行 Kafka 的部署和安装,可以更加方便地管理和维护 Kafka 的使用。 1. 安装 Java 环境 由于 Kafka 是基于 Java 编写的,因此在开始安装 Kafka 之前,需要先安装 Java 环境(JDK 8 或以…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部