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

当我们创建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日

相关文章

  • Java 异常java.lang.NoSuchFieldException解决方案

    首先让我们了解一下Java中的异常。 Java中的异常指的是程序在执行过程中遇到的错误或者异常状况,由于这些错误或异常状况的出现不可避免,因此对于Java程序员而言,处理异常是必不可少的一项技能。 其中,java.lang.NoSuchFieldException是一种我们常见的异常类型。这个异常意味着在运行时,Java虚拟机无法找到特定的类或接口中所声明的…

    Java 2023年5月27日
    00
  • Java语言简介(动力节点Java学院整理)

    下面我将详细讲解“Java语言简介(动力节点Java学院整理)”的攻略。 一、Java语言简介 Java 是由 sun 公司在 1991 年 5 月开发的一套跨平台的编程语言。Java 被设计成一种具有极高可移植性的编程语言,旨在使开发人员可以在不同的平台上编写代码,只要在目标平台上安装 JVM,就可以在不同操作系统上运行 Java 代码。 Java 语言是…

    Java 2023年5月23日
    00
  • 一文带你了解Java选择排序的原理与实现

    一文带你了解Java选择排序的原理与实现 什么是选择排序 选择排序是一种简单但低效的排序算法,其主要思想是每次从待排序的数列中选取最小(或最大)的数放到已排序数列的末尾,直到所有的数都被排序完毕。 选择排序的时间复杂度为O(n²),虽然效率比冒泡排序略高,但是由于其固定的O(n²)时间复杂度,对于大规模数据的排序,效率仍然十分低下。 选择排序的具体实现 以下…

    Java 2023年5月19日
    00
  • Java指令重排序在多线程环境下的处理方法

    Java指令重排序在多线程环境下的处理方法是非常重要的,因为指令重排序可能导致程序出现难以预测的结果,尤其是在多线程环境下。下面,我将详细讲解Java指令重排序在多线程环境下的处理方法,包括原理、处理方法和示例。 原理 Java指令重排序是指JVM在执行指令时,为了优化程序执行效率,可能会调整指令的执行顺序。这种优化不会影响单线程程序的执行,但是在多线程环境…

    Java 2023年5月26日
    00
  • 关于Apache默认编码错误 导致网站乱码的解决方案

    关于Apache默认编码错误 导致网站乱码的解决方案 问题描述 当在Apache服务器上部署网站时,如果网页中含有非英文字符,有时会出现乱码的情况,这是因为Apache服务器默认使用ISO-8859-1编码,而网页可能是采用UTF-8等编码格式。 解决方案 出现这种情况时,可以通过修改Apache服务器的配置文件httpd.conf来解决乱码问题。 打开ht…

    Java 2023年5月20日
    00
  • spring boot配置MySQL数据库连接、Hikari连接池和Mybatis的简单配置方法

    下面是详细的攻略: 1. 准备工作 在开始配置之前,我们需要先确保以下的几个准备工作已经完成: 安装好 JDK 和 MySQL 数据库,并且配置好相关环境变量。 在本地搭建好 Spring Boot 项目。 引入以下相关依赖到项目的 pom.xml 文件中: <dependency> <groupId>org.springframew…

    Java 2023年5月20日
    00
  • 浅谈spring和spring MVC的区别与关系

    1. Spring 和 Spring MVC 的区别与关系 Spring Spring 是一个开源的轻量级的 JavaEE 开发框架,主要解决企业级应用开发的复杂性。它提供了一个容器,可以管理应用中所有的组件和服务,帮助开发者解决组件之间的复杂依赖问题。 Spring 的特点: IoC(Inversion of Control) 控制反转 AOP(Aspec…

    Java 2023年5月16日
    00
  • JavaCV调用百度AI实现人脸检测方法详解

    JavaCV调用百度AI实现人脸检测方法详解 简介 本文将介绍如何使用JavaCV和百度AI平台实现人脸检测。JavaCV是一个基于OpenCV和FFmpeg库的Java接口。百度AI平台是一个提供机器视觉、语音识别、自然语言处理等人工智能服务的云端平台。通过将JavaCV和百度AI平台相结合,我们可以轻松实现人脸检测功能。 步骤 1. 注册百度AI平台账号…

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