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日

相关文章

  • 为什么在foreach循环中JAVA集合不能添加或删除元素

    为什么在foreach循环中JAVA集合不能添加或删除元素 在foreach循环中,JAVA集合是不允许添加或删除元素的。这是由于foreach循环需要遍历整个集合,而在循环过程中添加或删除元素会打乱集合中元素的顺序,从而可能导致遍历出错或漏掉某些元素,因此被JAVA设计者禁止了。 示例一: List<Integer> list = new Ar…

    Java 2023年5月20日
    00
  • Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码

    Java中提供了Base64类用于编码和解码base64字符串,通过该类我们可以实现字符串和base64编码之间的相互转换,下面是详细的攻略: Base64位编码与String字符串的相互转换 编码 在Java中,我们可以使用java.util.Base64类的getEncoder()方法获取Base64编码器,通过调用该对象的encodeToString(…

    Java 2023年5月20日
    00
  • java获取当前日期和时间的二种方法分享

    当我们在Java程序中需要获取当前日期和时间时,通常可以使用下面两种常见的方式: 一、使用Java Date类(已过时) Java中的Date类已经被微软官方宣布过时了,不建议使用。不过,这里还是提供一下使用Date类获取当前日期和时间的方式: import java.util.Date; public class GetDateTimeExample { …

    Java 2023年5月20日
    00
  • Java分层概念详解

    Java分层概念详解 什么是分层概念? 分层概念是软件架构中一种重要的设计思想,它将整个系统按照功能划分为多个不同的层次,每一层都有不同的工作职责和业务逻辑。每一层都可以独立进行开发和测试,而不会影响其他层的功能。同时,各个层之间通过接口交互数据,从而使得整个系统更加稳定、可靠、易于维护和升级。 一个标准的分层体系应该包含以下几个层次: 表现层(Presen…

    Java 2023年5月20日
    00
  • Java实现一个达达租车系统的步骤详解

    Java实现一个达达租车系统的步骤详解 第一步:需求分析和规划 在开始开发代码之前,必须先了解项目的需求和规划。在分析需求方面,需要考虑以下几点: 使用者和管理者的系统需求。 如何处理订单和租车。 如何计算租车费用。 如何处理支付和退款。 在规划方面,应该思考以下几点: 创建和管理车辆库存。 创建和管理订单。 创建和管理支付系统。 创建和管理价格计算方法。 …

    Java 2023年5月19日
    00
  • 常见的Java调试技术有哪些?

    常见的Java调试技术有以下几种: 1.打印日志 打印日志是最简单的调试技术,我们可以将关键信息打印到日志中,用于排查问题。Java提供了日志工具包java.util.logging,在代码中加入以下语句即可打印日志: import java.util.logging.Logger; // 创建Logger实例 private final static Lo…

    Java 2023年5月11日
    00
  • Spring security BCryptPasswordEncoder密码验证原理详解

    Spring Security BCryptPasswordEncoder密码验证原理详解 密码加密和验证是系统设计中非常重要的一部分,因为用户密码往往是非常重要且敏感的信息。为了保护用户的密码不被恶意窃取和使用,我们需要对密码进行加密和验证。 Spring Security提供了强大的密码加密和验证机制,其中 BCryptPasswordEncoder 是…

    Java 2023年5月20日
    00
  • 详解5种Java中常见限流算法

    详解5种Java中常见限流算法 在高并发场景下,为了保证系统的稳定性与安全性,通常需要对流量进行限制与控制。而限流算法就是实现这种控制的重要手段之一。在Java开发中,有多种常见的限流算法可供选择,本文将对这些算法进行详细讲解。 令牌桶算法 令牌桶算法是一种基于令牌(Token)实现的限流算法。在该算法中,系统会定期向桶中添加一定数量的令牌,每当有请求到来时…

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