为什么要使用静态初始化块?| Java Debug 笔记

简介: 为什么要使用静态初始化块?| Java Debug 笔记

前言

Java开发者,初学时,必然会学到静态初始化块这个概念。那么,静态初始化块,到底是什么呢,我们遇到了一个问题或者疑问,我们将要通过这个问题,来叙述静态初始化块的内容。

问题复现

其实遇到这个问题,估计是初学者必须遇到的问题。

对于大多数初学者来说,都会了解到静态初始化块是用来为静态成员设置值。

但是,其实大多数人不明白,为何会使用到这个静态初始化块。

比如,我们声明了一个没有分配值得静态成员。然后写几行静态初始化块,来进行变量赋值,值分配。

所以,我们很疑惑,为什么使用static{...}这种代码。

而且,我们很大程度上不明白,static{...}{...}的区别

问题解决

首先我们来先讲一下非静态初始化块是怎么回事。

{
    // Do Something...
}

静态初始化块仅会被执行一次,非静态初始化块会在每次对象创建时,都会进行创建。

例如:

public class Test {
    static{
        System.out.println("Static");
    }
    {
        System.out.println("Non-static block");
    }
    public static void main(String[] args) {
        Test t = new Test();
        Test t2 = new Test();
    }
}

方法执行,输出以下内容

Static
Non-static block
Non-static block

大概就是这个样子的,我们很好的看出来,他们之间的区别

那么,为啥要写这个呢。

很多原因,写这个是因为这个特点。比如

static {
    try {
        Class.forName("com.example.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        throw new ExceptionInInitializerError("Cannot load JDBC driver.", e);
    }
}

数据库的连接,肯定一次就解决了,其他的就不用了

总结

对于这个java概念,我们很好的熟悉了。那么,更应该熟悉的是我们对于学习时的方式方法。多结合例子,相信会有很好的帮助


目录
相关文章
|
6天前
|
设计模式 Java
Java基础—笔记—多态、final、抽象类、接口篇
该文介绍了编程中的多态、final和抽象类、接口相关概念。多态允许子类重写父类方法,通过父类引用调用子类方法,实现解耦和提高代码灵活性,但也可能导致无法使用子类特有功能,需通过强制类型转换解决。final用于修饰不可变的类、方法或变量,防止继承、重写和多次赋值。抽象类是一种包含抽象方法的类,用于强制子类重写特定方法,实现多态,适用于模板方法设计模式,解决代码重复问题。
22 0
|
6天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
13 0
|
6天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
17 0
|
6天前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
6天前
|
监控 负载均衡 Dubbo
|
6天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
14 0
|
6天前
|
Java
Java8 Stream流 使用笔记
Java8 Stream流 使用笔记
28 1
|
6天前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
6天前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
6天前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--插入排序
数据结构与算法(Java篇)笔记--插入排序