Java中static静态变量的初始化完全解析

yizhihongxing

Java中static静态变量的初始化完全解析

在Java中,静态变量(static变量)是独立于对象的变量,它们在类被加载时就被初始化,而不是在每次创建对象时都被初始化。本文将详细介绍Java中静态变量的初始化过程。

静态变量的初始化时机

静态变量是在类加载时被初始化的,具体包括以下3种情况:

  1. 类的静态变量在类加载时就初始化
  2. 在类的静态变量成员所在的类被初始化时初始化类的静态变量
  3. 在调用类的静态方法时初始化类的静态变量,即第一次使用类的时候初始化类的静态变量

静态变量的初始化方式

静态变量的初始化有以下3种方式:

1. 直接赋值

静态变量可以直接在定义它的类中进行赋值,例如:

public class StaticDemo {
    public static int count = 0;
    static {
        System.out.println("静态代码块初始化count:" + count);
    }
}

2. 静态代码块

静态代码块是在类被加载时自动执行的代码块。静态代码块中可以对静态变量进行初始化,例如:

public class StaticDemo {
    public static int count;
    static {
        count = 0;
        System.out.println("静态代码块初始化count:" + count);
    }
}

3. 静态工厂方法

在静态工厂方法中,可以对静态变量进行初始化,例如:

public class StaticDemo {
    public static int count;
    public static StaticDemo getInstance() {
        count = 0;
        return new StaticDemo();
    }
}

静态变量的读取

静态变量的读取有以下2种方式:

  1. 类名.变量名
  2. 对象名.变量名 (不推荐)

示例1:直接赋值

public class StaticDemo {
    public static int count = 0;
    static {
        count = 1;
        System.out.println("静态代码块初始化count:" + count);
    }
    public static void main(String[] args) {
        System.out.println("直接赋值初始化count:" + StaticDemo.count);
    }
}

输出如下:

静态代码块初始化count:1
直接赋值初始化count:1

示例2:静态代码块

public class StaticDemo {
    public static int count;
    static {
        count = 2;
        System.out.println("静态代码块初始化count:" + count);
    }
    public static void main(String[] args) {
        System.out.println("静态代码块初始化count:" + StaticDemo.count);
    }
}

输出如下:

静态代码块初始化count:2
静态代码块初始化count:2

结语

本文从静态变量的初始化时机、初始化方式和读取方式三个方面,详细介绍了Java中静态变量的初始化过程。除此之外,还提供了两个示例,希望能够对读者更好地理解Java中静态变量的初始化过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中static静态变量的初始化完全解析 - Python技术站

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

相关文章

  • SpringBoot FreeWorker模板技术解析

    SpringBoot FreeMarker模板技术解析 什么是FreeMarker模板引擎 FreeMarker是一款基于模板的Java模板引擎,它可以将模板和数据混合在一起生成输出文本,常用于动态生成HTML,XML,电子邮件等文本。 FreeMarker的特点: 容易创建和维护模板 可以产生非常多的输出格式(HTML,XML,XHTML,PDF等等) 可…

    Java 2023年5月19日
    00
  • Java IO之File 类详解

    Java IO之File 类详解 什么是File类 Java IO中的File类用于表示文件或目录的抽象路径名。 File类是Java IO包中最基础的类之一,它提供了对文件系统中文件或目录进行操作的方法。File类的对象可以是目录或文件,可以进行文件的创建、删除、重命名,以及返回一些有关文件或目录的基本信息(如文件名、路径、大小、修改时间等)。 File类…

    Java 2023年5月19日
    00
  • JAVA序列化和反序列化的底层实现原理解析

    JAVA序列化和反序列化的底层实现原理解析 序列化与反序列化的概念 序列化 序列化是指将对象转换成可传输的格式(例如字节码),并且可以在将来重新创建出与原对象完全相同的副本。序列化操作可以在网络上传输对象,或者将对象存储到本地磁盘上。 反序列化 反序列化是指将序列化后的数据流还原为原来的对象的操作。也就是说,反序列化能够重新创建出一个和已序列化的对象完全相同…

    Java 2023年5月19日
    00
  • 如何使用Jackson和JSON Pointer查询解析任何JSON节点

    如何使用Jackson和JSON Pointer查询解析任何JSON节点 Jackson是一个Java中处理JSON格式的高效库。除了允许你将一个Java对象序列化转化为JSON格式外,还可以用来读取和解析JSON。本文将详细讲解如何使用Jackson和JSON Pointer查询解析任何JSON节点。 JSON Pointer是一种用于在JSON文档中寻找…

    Java 2023年5月26日
    00
  • java实现图片验证码

    实现Java图片验证码的过程包括三个主要步骤:生成随机字符串、将字符串转化为图片、获取用户输入的验证码并进行验证。下面对这三个步骤分别进行详细的说明。 1. 生成随机字符串 我们可以使用Java的Random类生成指定长度的随机字符串。下面是一个生成6个字符长度的随机字符串的示例代码: Random random = new Random(); String…

    Java 2023年6月15日
    00
  • Java如何搭建一个个人网盘

    搭建个人网盘是一项不错的技术挑战,如果你有一定的Java编程经验,那么就可以利用Java来完成个人网盘的搭建。以下是一个简单的Java搭建个人网盘的攻略: 开发环境准备 首先,你需要一个完整的Java开发环境。安装JDK并配置相应的环境变量,建议使用JDK 8或以上版本。其次,你需要一个开发工具,例如Eclipse或IntelliJ IDEA等IDE。当然,…

    Java 2023年5月26日
    00
  • Java System类详解_动力节点Java学院整理

    Java System类详解_动力节点Java学院整理 什么是System类? System类是Java程序中提供的一个包含了一些系统级别的属性和控制操作的类。在Java程序中,我们可以使用System类来读取和设置系统的属性、读写标准的输入流、创建和操纵java虚拟机和Java程序等。 System类中常见的方法 1. System.getProperty…

    Java 2023年5月24日
    00
  • Java实现快速并查集

    让我来为大家详细讲解一下Java实现快速并查集的完整攻略。 什么是并查集 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。并查集的进阶版可以使用路径压缩和按秩合并的算法,使时间复杂度更加优秀。 Java实现快速并查集 下面我们将通过一个完整的Java实现过程,来详细讲解如何实现一个快…

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