欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中static和static?final的區(qū)別詳解

 更新時間:2023年10月26日 08:35:13   作者:碼農(nóng)回憶錄  
這篇文章主要介紹了Java中static和static?final的區(qū)別詳解,開發(fā)時我們經(jīng)常用到static以及static?final來修飾我們的字段變量,那么他們到底有什么區(qū)別呢?其實他們的區(qū)別可以用使用字節(jié)碼文件來解析,需要的朋友可以參考下

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查看字節(jié)碼文件

找到method下面的此方法不是我們編寫的,而是java自動給我們添加上的用于執(zhí)行類加載時靜態(tài)變量以及靜態(tài)代碼塊的內(nèi)容; 這里的字節(jié)碼命令很簡單,就是加載了hello然后賦值給了那么最后返回了;此處你會發(fā)現(xiàn)并沒有final修飾的字段的初始化。實際上final字段修飾的已經(jīng)在編譯期間就確定了值不需要在加載的時候賦值

在這里插入圖片描述

final字段的字節(jié)碼文件(刪除了其他干擾信息的字節(jié)碼文件)

  • 此處可以發(fā)現(xiàn)在字節(jié)碼文件中已經(jīng)寫明了ConstantValue: String finalName, 這也就代表編譯期間就已經(jīng)有值了
  • static塊的內(nèi)容也就是上圖看到的內(nèi)容
{
  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.總結(jié)

static修飾的字段的值,會在類加載階段的初始化階段進行內(nèi)容初始化static final字段的初始化在編譯期間就已經(jīng)完成

到此這篇關于Java中static和static final的區(qū)別詳解的文章就介紹到這了,更多相關static和static final的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

到此這篇關于Java中static和static final的區(qū)別詳解的文章就介紹到這了,更多相關static和static final的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • IDEA的run maven方式啟動步驟詳解

    IDEA的run maven方式啟動步驟詳解

    這篇文章主要介紹了IDEA的run maven方式啟動步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 最新評論