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

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集成mybatis与jsp过程详解

    下面详细讲解Springboot集成mybatis与jsp的过程。 环境配置 首先需要安装Java虚拟机和Maven,可以去官网下载安装。 建立一个Springboot工程,可以使用Eclipse、IntelliJ IDEA等开发工具,也可以在https://start.spring.io/官网上生成一个基本的Springboot项目。 添加依赖包 在pom…

    Java 2023年5月19日
    00
  • PHP和Java的主要区别有哪些?哪个最适合Web开发语言?

    PHP和Java是两种常见的Web开发语言,它们各有优势和适用场景。下面详细讲解它们的主要区别以及哪个更适合Web开发。 PHP和Java的主要区别 语言类型 PHP是一种脚本语言,简单易学,适合快速开发小规模Web应用。Java是一种编译型语言,对程序员的学习和训练更多的关注和考验程序员的编程思想。 性能 Java性能更好,尤其是在处理大量请求时表现更优秀…

    Java 2023年5月20日
    00
  • Java 分位点(分位值)计算方式

    当需要将一组数据进行分布分析时,可以通过计算分位点(quantile),常用的分位点有中位数、上四分位数、下四分位数等。在Java中,可以使用Apache Commons Math库来计算分位点,本文将介绍Java分位点计算方式的完整攻略。 引入依赖 要使用Apache Commons Math库,需要在pom.xml文件中添加以下依赖: <depen…

    Java 2023年5月26日
    00
  • 在JSP中访问数据库大全

    以下是在JSP中访问数据库的完整攻略: 1. 准备工作 要在JSP中访问数据库,首先需要安装JDBC驱动和配置数据库连接信息。 下载对应数据库的JDBC驱动jar包,将其放置于Web应用的WEB-INF/lib目录下 在Web应用的WEB-INF目录下创建一个名为web.xml的文件,并在其中配置数据库连接信息,比如连接地址、用户名、密码等 <!– …

    Java 2023年6月15日
    00
  • Window搭建部署RocketMQ步骤详解

    下面是详细讲解“Window搭建部署RocketMQ步骤详解”的完整攻略。 Window搭建部署RocketMQ步骤详解 RocketMQ是一个分布式消息传递系统,由阿里巴巴团队开发和维护。在实际开发中,我们经常需要使用消息队列来进行异步通信与解耦。本文将介绍如何在Window平台上搭建和部署RocketMQ。 步骤一:下载和安装JDK RocketMQ是基…

    Java 2023年5月20日
    00
  • @JsonFormat 实现日期格式自动格式化

    当使用Spring Boot框架进行RESTful API开发时,经常会涉及到将日期格式化为特定格式的需求。常见的做法是使用@JsonFormat注解实现日期格式自动格式化。 下面我来给你详细讲解一下实现日期格式自动格式化的攻略。 1. 引入依赖 在项目的pom.xml文件中引入Jackson依赖: <dependency> <groupI…

    Java 2023年5月20日
    00
  • Mybatis实战教程之入门到精通(经典)

    “Mybatis实战教程之入门到精通(经典)”是一篇非常详细的教程,在Mybatis的学习过程中非常有参考意义。下面我将为您介绍这篇教程的完整攻略。 目录 Mybatis实战教程之入门到精通(经典)教程包含以下内容: Mybatis入门介绍 Mybatis快速开发基础 Mybatis动态SQL开发 Mybatis中的一级缓存和二级缓存 Mybatis整合Sp…

    Java 2023年5月20日
    00
  • Java实现批量向mysql写入数据的方法

    当需要向mysql中插入大批量数据时,通过Java程序向数据库逐一插入会比较慢,而批量插入可以提高插入效率。下面就讲解一下如何Java实现批量向mysql写入数据的方法。 1. 准备工作 在开始之前,需要先检查好已经安装好了Mysql的Java驱动,可以在官网下载或在maven中引入即可。 另外,在写程序之前,需要先创建一个mysql表,以下示例代码将插入数…

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