Java构造代码块,静态代码块原理与用法实例分析

yizhihongxing

当我们创建Java对象时,会自动对对象进行初始化。除了对属性进行初始化外,我们还可以利用代码块来进行初始化操作。其中Java构造代码块和静态代码块都是常见的初始化方式。

构造代码块

构造代码块是一种在类中直接使用非静态代码块的方式来对实例进行初始化的机制。它只跟随构造函数一起执行,例如:

public class CodeBlockExample {
    {
        System.out.println("构造代码块执行");
    }

    public CodeBlockExample() {
        System.out.println("构造函数执行");
    }

    public static void main(String[] args) {
        new CodeBlockExample();
        new CodeBlockExample();
    }
}

输出结果如下:

构造代码块执行
构造函数执行
构造代码块执行
构造函数执行

由于构造代码块只跟随构造函数执行一次,因此上述代码会执行两次构造代码块,但只执行一次构造函数。

静态代码块

静态代码块是在类被加装时最先执行的代码块,不依赖于任何方法或者实例的调用。用法如下:

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

    public static void main(String[] args) {
        new CodeBlockExample();
        new CodeBlockExample();
    }
}

输出结果如下:

静态代码块执行
静态代码块执行

静态代码块只执行一次,而且在类被加载时直接执行,因此输出结果中也只有一次静态代码块执行。

静态代码块用法示例

  1. 静态代码块加载资源文件

静态代码块可以用来加载资源文件,例如:

public class ResourceLoader {
    private static Properties properties;

    static {
        properties = new Properties();
        try {
            properties.load(ResourceLoader.class.getClassLoader().getResourceAsStream("config.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String value = properties.getProperty("key");
        System.out.println(value);
    }
}

上述代码通过静态代码块加载了类路径下的config.properties文件,并将其内容存储在静态变量properties中,以供后续程序调用。

  1. 静态代码块初始化单例对象

静态代码块可以用于初始化单例对象,例如:

public class Singleton {
    private static Singleton INSTANCE = null;

    static {
        INSTANCE = new Singleton();
    }

    private Singleton() {};

    public static Singleton getInstance() {
        return INSTANCE;
    }

    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
        System.out.println(singleton);
    }
}

上述代码通过静态代码块初始化了单例对象INSTANCE,确保在任何情况下都只存在一个实例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java构造代码块,静态代码块原理与用法实例分析 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • sqlserver 文件数据库和关系数据库的比较

    SQL Server 文件数据库和关系数据库比较 概述 SQL Server 是一种关系型数据库管理系统(RDBMS),同时也支持文件数据库。在SQL Server中,关系数据库的存储是通过表的形式,将数据存储在多个表中,并通过各种关系将表连接在一起。而文件数据库则是通过文件系统在磁盘上存储数据。 区别 存储形式 关系数据库是将数据存储在一个或多个表中,通过…

    Java 2023年5月26日
    00
  • Spring Security全新版本使用方式

    下面是关于Spring Security全新版本使用方式的完整攻略: 什么是Spring Security? Spring Security是一个强大且可高度自定义的框架,用于身份验证和授权。它基于Servlet过滤器,可以轻松地将安全性添加到Web应用程序中。 如何使用Spring Security? 步骤一:添加Spring Security依赖 首先,…

    Java 2023年5月20日
    00
  • spring batch线上异常定位记录

    以下是关于Spring Batch线上异常定位记录的完整攻略: 1. 异常定位前的准备工作 在使用Spring Batch时,我们需要做好记录异常信息的工作,可以借助Spring Batch提供的日志输出功能进行记录。特别地,我们在实现任务的时候,可以添加定时异常上报的任务。这样,出现问题时我们可以迅速地了解问题所在,进行快速的定位。 2. 异常记录方式 2…

    Java 2023年5月27日
    00
  • 一文详解Spring Security的基本用法

    一文详解Spring Security的基本用法 Spring Security是Spring框架中用于安全管理的子框架,它提供了一系列机制来保护应用程序的资源不被未经授权的用户访问,是Web应用程序开发中不可或缺的一部分。本文将详细讲解Spring Security的基本用法,包括如何添加依赖、配置安全和认证、以及如何使用注解来保护资源。 添加Spring…

    Java 2023年5月20日
    00
  • 基于Java SpringBoot的前后端分离信息管理系统的设计和实现

    基于Java SpringBoot的前后端分离信息管理系统的设计和实现攻略 一、背景介绍 随着互联网时代的到来,信息管理成为重要的需求。而采用前端和后端分离的开发方式可以提高开发效率和减轻后端压力。本文将介绍基于Java SpringBoot的前后端分离信息管理系统的设计和实现攻略。 二、技术栈 后端:Java SpringBoot、MyBatis、Swag…

    Java 2023年6月3日
    00
  • java 内部类(匿名类,匿名对象,静态内部类)详解及实例

    Java内部类(匿名类,匿名对象,静态内部类)详解及实例 Java内部类是一个嵌套在其他类中的类,内部类可以访问外部类的所有成员(包括私有成员),并且可以用来实现一些特殊的功能。Java内部类通常分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。 成员内部类 成员内部类是定义在外部类的内部,并且不是 static 的内部类。成员内部类可以访问外部…

    Java 2023年5月26日
    00
  • Tomcat服务器的安装配置图文教程(推荐)

    下面详细讲解“Tomcat服务器的安装配置图文教程(推荐)”的完整攻略。 1. 下载与安装Tomcat 首先,从Tomcat官网 https://tomcat.apache.org/ 下载最新的Tomcat安装文件,选择与你系统对应的版本(一般会选择zip或tar.gz压缩文件)。下载完成后,将Tomcat文件解压到你想要安装的目录中。 示例: # 假设我们…

    Java 2023年5月19日
    00
  • Springboot集成restTemplate过程详解

    下面是详细讲解“Springboot集成restTemplate过程详解”的完整攻略。 介绍 在Springboot中,restTemplate是一个常用的HTTP客户端,用于发送REST请求和接收REST响应。本文将介绍如何在Springboot中集成restTemplate。 步骤 步骤1:添加依赖 首先,在项目的pom.xml文件中添加以下依赖: &l…

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