1. 程式人生 > >Class類檔案結構之ConstantValue屬性

Class類檔案結構之ConstantValue屬性

程式設計過程中經常用的static,final關鍵字,也經常聽到同事談起這些詞,到底他們怎麼樣呢,jvm中class類檔案結構可以找到答案。

ConstantValue屬性

ConstantValue屬性的作用是通知虛擬機器自動為靜態變數賦值,只有被static修飾的變數才可以使用這項屬性。非static型別的變數的賦值是在例項構造器方法中進行的;tatic型別變數賦值分兩種,在類構造其中賦值,或使用ConstantValue屬性賦值。

在實際的程式中,只有同時被final和static修飾的欄位才有ConstantValue屬性,且限於基本型別和String。編譯時Javac將會為該常量生成ConstantValue屬性,在類載入的準備階段虛擬機器便會根據ConstantValue為常量設定相應的值,如果該變數沒有被final修飾,或者並非基本型別及字串,則選擇在類構造器中進行初始化。

為什麼ConstantValue的屬性值只限於基本型別和string

因為從常量池中只能引用到基本型別和String型別的字面量

finalstaticstatic final修飾的欄位賦值的區別
  • static修飾的欄位在載入過程中準備階段被初始化,但是這個階段只會賦值一個預設的值(0或者null而並非定義變數設定的值)初始化階段在類構造器中才會賦值為變數定義的值。
  • final修飾的欄位在執行時被初始化,可以直接賦值,也可以在例項構造器中賦值,賦值後不可修改。
  • static final修飾的欄位在javac編譯時生成comstantValue屬性,在類載入的準備階段直接把constantValue的值賦給該欄位。
    可以理解為在編譯期即把結果放入了常量池中。

相關推薦

Class檔案結構ConstantValue屬性

程式設計過程中經常用的static,final關鍵字,也經常聽到同事談起這些詞,到底他們怎麼樣呢,jvm中class類檔案結構可以找到答案。 ConstantValue屬性 ConstantValue屬性的作用是通知虛擬機器自動為靜態變數賦值,只有被stat

jvm探祕五:Class檔案結構屬性

概述 在Class檔案、欄位表和方法表都可以攜帶自己的屬性資訊,這個資訊用屬性表進行描述,用於描述某些場景專有的資訊。 與Class檔案中其它資料項對長度、順序、格式的嚴格要求不同,屬性表集合不要求其中包含的屬性表具有嚴格的順序,並且只要屬性的名稱不與已

【深入Java虛擬機器】二:Class檔案結構

平臺無關性     Java是與平臺無關的語言,這得益於Java原始碼編譯後生成的儲存位元組碼的檔案,即Class檔案,以及Java虛擬機器的實現。不僅使用Java編譯器可以把Java程式碼編譯成儲存位元組碼的Class檔案,使用JRuby等其他語言的編譯器也可以把程式

Java Class檔案結構

平臺無關性 Java是與平臺無關的語言,這得益於Java原始碼編譯後生成的儲存位元組碼的檔案,即Class檔案,以及Java虛擬機器的實現。不僅使用Java編譯器可以把Java程式碼編譯成儲存位元組碼的Class檔案,使用JRuby等其他語言的編譯器也可以把程式程式碼編譯成Class檔案,虛擬機

JVM虛擬機器 - Class檔案結構

JVM虛擬機器 - Class類檔案結構 概述 Class檔案是一組以8位位元組為基礎單位的二進位制流,各個資料專案嚴格按照順序緊湊地排列在Class檔案之中,中間沒有新增任何分隔符,這使得整個Class檔案中儲存的內容幾乎都是程式執行的必要資料。當遇到需要佔用8位位元組以上空間的資

深入理解JVM虛擬機器(四):Class檔案結構(二)

屬性表在前面的講解中出現多次,在Class檔案、欄位表、方法表都可以攜帶自己的屬性表集合,用於描敘某些場景專有的資訊。為了正確解析Class檔案,《Java虛擬機器規範(第二版)》中預定義了9項虛擬機器實現應當識別的屬性。然而在最新的《Java虛擬機器規範(Java SE7)》中屬性表已經增

如何學好JVM征服面試官?一篇Class 檔案結構你還不會嗎?

        Java 跨平臺的基礎 各種不同平臺的虛擬機器與所有平臺都

Class 檔案結構

> 本文部分摘自《深入理解 Java 虛擬機器第三版》 ## 概述 我們知道,Java 具有跨平臺性,其實現基礎就是虛擬機器和位元組碼儲存格式。Java 虛擬機器不與 Java 語言繫結,只與 Class 檔案所關聯。Java 虛擬機器作為一個通用的、與機器無關的執行平臺,任何語言都可以將 Jav

【JVM】class檔案結構

作為Java程式猿,我們知道,我們寫好的.java 原始碼,最後會被Java編譯器編譯成字尾為.class的檔案,該型別的檔案是由位元組組成的檔案,又叫位元組碼檔案。那麼,class位元組碼檔案裡面到底是有什麼呢?它又是怎樣組織的呢?讓我們先來大概瞭解一下他的組成結構吧。  

jdk原始碼解析(六)——class檔案結構

前面的內容我們瞭解到jvm的記憶體結構。所有java檔案必須經過“編譯”轉成class檔案之後才會被jvm所識別和運用。那麼我們開始瞭解一下類檔案也就是class檔案的結構。也就是我們寫的java檔案最終會被編譯成什麼樣?那種格式? 本文講解內容借鑑了《Java 虛擬機器規範(Java SE 7

Java中的檔案結構之一:如何分析一個.class檔案的二進位制碼內容

該文為作者原創,請轉載者註明出處 以下為一個Java類--Temp4Test package com.demo; public class Temp4Test extends Temp3Test { private int i = 1;

Class檔案結構

        JAVA實現平臺無關性的基礎是虛擬機器和位元組碼儲存格式,使用Java編譯器可以把Java程式碼編譯為儲存位元組碼的Class檔案,使用JRuby等其他語言的編譯器一樣可以把程式程式碼編譯成Class檔案,虛擬機器並不關心Class的來源是什麼語言,只要它符

深入理解JVM五:檔案結構

前言 我們平時在DOS介面中往往需要執行先執行javac命令,這個命令的直接結果就是產生相應的class檔案,然後基於這個class檔案才可以真正執行程式得到結果。自然。這是Java虛擬機器的功勞,那麼是不是Java虛擬機器只能編譯.java的原始檔呢?答案是

深入理解Java虛擬機器筆記---class檔案魔數,版本,常量池

魔數    每個class檔案的頭4個位元組稱為魔數(Magic Number),其值為:0xCAFEBABE,它的唯一作用是用於確定這個檔案是否為一個能被虛擬機器接受的class檔案。使用魔數而不是副檔名來進行識別主要是基於安全的考慮,因為檔案的副檔名可以隨意地被改動。 版本號

檔案結構的簡單描述

一、class類檔案的結構 1、常量池 常量池:用於存放編譯期生成的各種字面量和符號引用,這部分內容分將在類載入後進入方法區的執行時常量中存放。 字面量:比較接近java語言層面的常量概念,如文字字串、宣告為final的常量值等。 符號引用:屬於編譯原理方面的概念,包括了下面三類

第六章 檔案結構

6.1 概述       程式碼編譯的結果是從本地機器碼轉變為位元組碼,是儲存格式發展的一小步,卻是程式語言發展的一大步。由於最近10年內虛擬機器及建立在虛擬機器之上的大量程式設計語言如雨後春筍般出現並蓬勃發展,將我們的程式編譯成二進位制本地機器碼已不再是唯一的選擇

HashTable與HashMap的區別,資料結構檔案結構,原始碼分析

轉載https://www.imooc.com/article/details/id/23015 與HashMap的區別 1 HashMap是非同步的,沒有對讀寫等操作進行鎖保護,所以是執行緒不安全的,在多執行緒場景下會出現資料不一致的問題。而HashTable是同步的,所有的讀寫等操作都進

讀書筆記 ---- 《深入理解Java虛擬機器》---- 第5篇:檔案結構

上一篇:虛擬機器效能監控與故障處理工具:https://blog.csdn.net/pcwl1206/article/details/84197113 第5篇:類檔案結構 開篇說明:本文的重點就是類檔案結構,只需要清楚Class檔案格式中的各名稱的實際意義就行,不用對具體名稱下的細節進行深究

【Java虛擬機器】檔案結構

類檔案結構 class檔案是一組8位位元組為基礎單位的二進位制流,各個資料專案嚴格按照順序緊湊地排列在class檔案中,中間沒有新增任何分隔符。遇到需要佔用8位位元組以上空間的資料項時,則會按照高位在前的方式分割成若干個8位位元組進行儲存。 class檔案格式只有兩種資料型別:無

深入理解Java虛擬機器(檔案結構+載入機制+位元組碼執行引擎)

周志明的《深入理解Java虛擬機器》很好很強大,閱讀起來頗有點費勁,尤其是當你跟隨作者的思路一直探究下去,開始會讓你弄不清方向,難免有些你說的啥子的感覺。但知識不得不學,於是天天看,反覆看,就慢慢的理解了。我其實不想說這種硬磨的方法有多好,我甚至不推薦,我建議大家閱讀這本書時,由淺入深,有舍有得,先從巨集觀去