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日

相关文章

  • 聊聊springmvc中controller的方法的参数注解方式

    在 Spring MVC 中,Controller 的方法参数注解方式是一种非常方便的方式,可以让我们更加灵活地处理请求参数。本文将详细讲解 Spring MVC 中 Controller 的方法参数注解方式,并提供两个示例说明。 Controller 的方法参数注解方式 在 Spring MVC 中,Controller 的方法参数注解方式可以让我们更加灵…

    Java 2023年5月18日
    00
  • java单链表实现书籍管理系统

    为了实现“java单链表实现书籍管理系统”,我们需要完成以下步骤: 定义Book类,包括属性:书名、作者、出版社、ISBN编号等 定义Node类,包括属性:存储的Book对象、指向下一个节点的引用Next等 定义LinkedList类,包括属性:链表长度、头节点引用head等 实现LinkedList类的各种操作方法,例如增加、删除、修改、查找、遍历等 下面…

    Java 2023年5月24日
    00
  • JSP spring boot / cloud 使用filter防止XSS

    下面是详细的JSP Spring Boot/Cloud使用Filter防止XSS的攻略: 什么是XSS攻击 XSS(Cross Site Scripting)攻击是一种非常常见的互联网应用程序攻击,攻击者通过注入恶意脚本代码,在受害者的浏览器中运行这些脚本,从而窃取用户的个人信息或者执行其他危险操作。该攻击方式十分危险,能够威胁到用户的隐私和信息安全,目前已…

    Java 2023年6月15日
    00
  • java与scala数组及集合的基本操作对比

    Java与Scala数组及集合的基本操作可以进行如下对比: 数组 Java数组 Java中的数组是一个固定大小的容器,用来存储相同类型的元素。数组的大小在创建时是固定的,无法修改。 创建数组 Java中创建数组需要指定数组的类型和大小。如下所示,创建一个包含5个int类型元素的数组: int[] myArray = new int[5]; 插入/获取元素 J…

    Java 2023年5月26日
    00
  • java通过JFrame做一个登录系统的界面完整代码示例

    下面我将为你详细讲解如何使用Java通过JFrame做一个登录系统的界面。 前提准备 在开始编写代码之前,我们需要先确保已经安装好了Java开发环境,推荐使用Eclipse开发工具。 第一步:搭建界面 在Java中,JFrame是我们常用的界面设计类。我们首先需要实例化一个JFrame类,并为其设置一些基本的属性,比如窗口大小、标题等。示例如下: impor…

    Java 2023年5月24日
    00
  • jsp简单自定义标签的forEach遍历及转义字符示例

    JSP(JavaServer Pages)是一种动态网页编程语言,旨在简化 HTML、Java Servlet 和 JavaBeans 之间的 web 应用程序的创建和维护。自定义标签是 JSP 中非常重要的一部分,可以用于扩展 JSP 功能以及将页面分离成多个组件实现模块化开发。 在 JSP 中,循环遍历是非常常见的需求,使用自定义标签实现循环遍历可以增加…

    Java 2023年6月15日
    00
  • jsp中Action使用session方法实例分析

    对于这个问题,我将介绍JSP中使用Action对象进行会话控制的方法,并附上两个实例。 什么是Action对象? Action是org.apache.struts.action.Action类的一个实例,是 Struts 框架中的一个关键组成部分。Action对象是用于处理HTTP请求的 Java 类,在 Struts 架构中起到中心作用。Action通过从…

    Java 2023年5月20日
    00
  • Java解压缩zip – 解压缩多个文件或文件夹实例

    下面是“Java解压缩zip – 解压缩多个文件或文件夹实例”的完整攻略: 前置要求 在进行Java解压缩zip操作之前,需要先安装并配置好Java开发环境。 解压缩多个文件或文件夹实例 在Java中,我们可以使用ZipFile类和ZipEntry类来进行解压缩操作。 ZipFile类 ZipFile类表示表示一个zip文件,我们可以通过它来获取zip文件中…

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