Java中static和static final的区别详解

 更新时间:2023年10月26日 08:35:13   作者:码农回忆录  
这篇文章主要介绍了Java中static和static final的区别详解,开发时我们经常用到static以及static final来修饰我们的字段变量,那么他们到底有什么区别呢?其实他们的区别可以用使用字节码文件来解析,需要的朋友可以参考下

1. 准备测试代码

package com.hgy;

import java.util.Arrays;
import java.util.List;

public class hello {

	private static String name = "hello";
	private static final String finalName = "finalName";

	public static void main(String[] args) {
		System.out.println(name);

	}
}

2. 利用idea中的插件jclasslib查看字节码文件

找到method下面的此方法不是我们编写的,而是java自动给我们添加上的用于执行类加载时静态变量以及静态代码块的内容; 这里的字节码命令很简单,就是加载了hello然后赋值给了那么最后返回了;此处你会发现并没有final修饰的字段的初始化。实际上final字段修饰的已经在编译期间就确定了值不需要在加载的时候赋值

在这里插入图片描述

final字段的字节码文件(删除了其他干扰信息的字节码文件)

  • 此处可以发现在字节码文件中已经写明了ConstantValue: String finalName, 这也就代表编译期间就已经有值了
  • static块的内容也就是上图看到的内容
{
  public static final java.lang.String finalName;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: String finalName

  static {};
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: ldc           #6                  // String hello
         2: putstatic     #7                  // Field name:Ljava/lang/String;
         5: return
      LineNumberTable:
        line 8: 0
}
SourceFile: "hello.java"

3.总结

static修饰的字段的值,会在类加载阶段的初始化阶段进行内容初始化static final字段的初始化在编译期间就已经完成

到此这篇关于Java中static和static final的区别详解的文章就介绍到这了,更多相关static和static final的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

到此这篇关于Java中static和static final的区别详解的文章就介绍到这了,更多相关static和static final的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Struts2截取字符串代码介绍

    Struts2截取字符串代码介绍

    这篇文章主要介绍了Struts2截取字符串代码介绍,介绍了基本的截取方法,以及截取带html标签字符串的方法,需要的朋友可以了解下。
    2017-09-09
  • java 中内部类的实例详解

    java 中内部类的实例详解

    这篇文章主要介绍了java 中内部类的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Springboot升级至2.4.0中出现的跨域问题分析及修改方案

    Springboot升级至2.4.0中出现的跨域问题分析及修改方案

    这篇文章主要介绍了Springboot升级至2.4.0中出现的跨域问题分析及修改方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • mybatis xml注释sql的注意事项及说明

    mybatis xml注释sql的注意事项及说明

    这篇文章主要介绍了mybatis xml注释sql的注意事项及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 使用jaxp进行dom解析_动力节点Java学院整理

    使用jaxp进行dom解析_动力节点Java学院整理

    这篇文章主要介绍了使用jaxp进行dom解析的相关资料,需要的朋友可以参考下
    2017-08-08
  • springboot实现异步任务

    springboot实现异步任务

    这篇文章主要为大家详细介绍了springboot实现异步任务,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Spring中@Conditional注解的详细讲解及示例

    Spring中@Conditional注解的详细讲解及示例

    这篇文章主要介绍了Spring中@Conditional注解的详细讲解及示例,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean,需要的朋友可以参考下
    2023-11-11
  • Java读取properties文件之中文乱码问题及解决

    Java读取properties文件之中文乱码问题及解决

    这篇文章主要介绍了Java读取properties文件之中文乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Java实现基于TCP的通讯程序实例解析

    Java实现基于TCP的通讯程序实例解析

    这篇文章主要介绍了Java实现基于TCP的通讯程序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • IDEA的run maven方式启动步骤详解

    IDEA的run maven方式启动步骤详解

    这篇文章主要介绍了IDEA的run maven方式启动步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论