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

Java類中字段可以不賦予初始值的原因分析

 更新時(shí)間:2021年09月01日 11:29:58   作者:愛(ài)唱歌的瓜皮  
這篇文章主要介紹了Java類中字段可以不賦予初始值的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java類中字段可以不賦予初始值的原因

Java虛擬機(jī)會(huì)對(duì)類的實(shí)例對(duì)象進(jìn)行分配內(nèi)存,在分配內(nèi)存后,會(huì)將內(nèi)存空間(除了對(duì)象頭)全部初始化為零值。這就保證了,在類的定義過(guò)程中,不給字段賦初始值,實(shí)例對(duì)象也能有初始值。

下面是在Java類中各字段的初始值

字段 默認(rèn)初始值
對(duì)象 null
數(shù)值(byte,short,int,long,float,double) 0或0.0
boolean false
char \u0000(輸出出來(lái)是空值)
class Solution {
    private static char c;
    private static int i;
    private static long l;
    private static float f;
    private static double d;
    private static String s;
    private static boolean bl;
    private static byte b;
    public static void main(String[] args) {
        System.out.println(c == '\u0000');
        System.out.print(c);
        System.out.println(i);
        System.out.println(l);
        System.out.println(f);
        System.out.println(d);
        System.out.println(s);
        System.out.println(bl);
        System.out.println(b);
    }
}
 
/*輸出結(jié)果
true
0
0
0
0
0.0
0.0
null
false
*/

Java中類屬性的初始化

我們知道一個(gè)類(class)要被使用必須經(jīng)過(guò)裝載,連接初始化這樣的過(guò)程。下面先對(duì)這三階段做一個(gè)簡(jiǎn)單的描述,之后會(huì)結(jié)合一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明java中類的初始化過(guò)程。

在裝載階段,類裝載器(Bootstrap ClassLoader 或者用戶自定義的ClassLoader) 把編譯形成的class文件載入內(nèi)存,創(chuàng)建類相關(guān)的Class對(duì)象,這個(gè)Class對(duì)象封裝了我們要使用的類的類型信息。

連接階段又可以分為三個(gè)子步驟:驗(yàn)證、準(zhǔn)備和解析

驗(yàn)證就是要確保java類型數(shù)據(jù)格式 的正確性,并適于JVM使用。

準(zhǔn)備階段,JVM為靜態(tài)變量分配內(nèi)存空間,并設(shè)置默認(rèn)值,注意,這里是設(shè)置默認(rèn)值,比如說(shuō)int型的變量會(huì)被賦予默認(rèn)值0 。在這個(gè)階段,JVM可能還會(huì)為一些數(shù)據(jù)結(jié)構(gòu)分配內(nèi)存,目的 是提高運(yùn)行程序的性能,比如說(shuō)方法表。

解析過(guò)程就是在類型的常量池中尋找類、接口、字段和方法的符號(hào)引用,把這些符號(hào)引用替換成直接引用。這個(gè)階段可以被推遲到初始化之后,當(dāng)程序運(yùn)行的過(guò)程中真正使用某個(gè)符號(hào)引用的時(shí)候 再去解析它。

類會(huì)在首次被“主動(dòng)使用”時(shí)執(zhí)行初始化,為類(靜態(tài))變量賦予正確的初始值。在Java代碼中,一個(gè)正確的初始值是通過(guò)類變量初始化語(yǔ)句或者靜態(tài)初始化塊給出的。

而我們這里所說(shuō)的主動(dòng)使用 包括

1. 創(chuàng)建類的實(shí)例

2. 調(diào)用類的靜態(tài)方法

3. 使用類的非常量靜態(tài)字段

4. 調(diào)用Java API中的某些反射方法

5. 初始化某個(gè)類的子類

6. 含有main()方法的類啟動(dòng)時(shí)

初始化一個(gè)類包括兩個(gè)步驟

1、 如果類存在直接父類的話,且直接父類還沒(méi)有被初始化,則先初始化其直接父類

2、 如果類存在一個(gè)初始化方法,就執(zhí)行此方法

注:初始化接口并不需要初始化它的父接口。

Java中final變量為什么在使用前必須要進(jìn)行初始化

final修飾的變量表示賦值之后不能再進(jìn)行更改,系統(tǒng)賦默認(rèn)值也算賦值,因此系統(tǒng)也不會(huì)賦默認(rèn)值。

如果不在定義的時(shí)候或者構(gòu)造函數(shù)中對(duì)final變量進(jìn)行賦值的話,則生成的對(duì)象中final變量的值是未知的(編譯器也會(huì)直接報(bào)錯(cuò)),因此必須進(jìn)行初始化。

如果用static final同時(shí)修飾變量的話,則變量必須在定義的時(shí)候進(jìn)行初始化。因?yàn)閟tatic變量屬于類,在調(diào)用構(gòu)造函數(shù)之前就已經(jīng)被系統(tǒng)賦予默認(rèn)值了。

如果不在定義的時(shí)候初始化,那么既無(wú)法在構(gòu)造函數(shù)中初始化,系統(tǒng)也不會(huì)賦默認(rèn)值。則該變量被定義出來(lái)是毫無(wú)意義的

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 發(fā)送http請(qǐng)求上傳文件功能實(shí)例

    Java 發(fā)送http請(qǐng)求上傳文件功能實(shí)例

    本文通過(guò)實(shí)例代碼給大家介紹了Java 發(fā)送http請(qǐng)求上傳文件功能,需要的朋友參考下吧
    2017-06-06
  • 解決IDEA啟動(dòng)springboot項(xiàng)目報(bào)錯(cuò)java.lang.ClassNotFoundException:?javax.servlet.ServletContext

    解決IDEA啟動(dòng)springboot項(xiàng)目報(bào)錯(cuò)java.lang.ClassNotFoundException:?jav

    這篇文章主要介紹了解決IDEA啟動(dòng)springboot項(xiàng)目報(bào)錯(cuò)java.lang.ClassNotFoundException:?javax.servlet.ServletContext問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java Socket編程心跳包創(chuàng)建實(shí)例解析

    Java Socket編程心跳包創(chuàng)建實(shí)例解析

    這篇文章主要介紹了Java Socket編程心跳包創(chuàng)建實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • 使用jib插件為Java應(yīng)用構(gòu)建鏡像的方法

    使用jib插件為Java應(yīng)用構(gòu)建鏡像的方法

    這篇文章主要介紹了使用jib插件為Java應(yīng)用構(gòu)建鏡像,要是用戶本地沒(méi)安裝docker,可以使用jib制作出帶有鏡像的tar文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • java中MVC模式與三層架構(gòu)

    java中MVC模式與三層架構(gòu)

    這篇文章主要讓我們理解MVC模式和三層架構(gòu)的基礎(chǔ)知識(shí),有興趣的同學(xué)可以閱讀,借鑒參考一下
    2023-03-03
  • springboot配置多數(shù)據(jù)源(靜態(tài)和動(dòng)態(tài)數(shù)據(jù)源)

    springboot配置多數(shù)據(jù)源(靜態(tài)和動(dòng)態(tài)數(shù)據(jù)源)

    在開(kāi)發(fā)過(guò)程中,很多時(shí)候都會(huì)有垮數(shù)據(jù)庫(kù)操作數(shù)據(jù)的情況,需要同時(shí)配置多套數(shù)據(jù)源,本文主要介紹了springboot配置多數(shù)據(jù)源(靜態(tài)和動(dòng)態(tài)數(shù)據(jù)源),感興趣的可以了解一下
    2023-09-09
  • 使用Spring AOP監(jiān)控指定方法執(zhí)行時(shí)間的代碼詳解

    使用Spring AOP監(jiān)控指定方法執(zhí)行時(shí)間的代碼詳解

    這篇文章主要介紹了使用Spring AOP監(jiān)控指定方法執(zhí)行時(shí)間,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • Java?Spring?循環(huán)依賴解析

    Java?Spring?循環(huán)依賴解析

    這篇文章主要介紹了Java?Spring?循環(huán)依賴解析,Spring?現(xiàn)在其實(shí)是我們?Java?程序開(kāi)發(fā)離不開(kāi)的基礎(chǔ)框架,個(gè)人覺(jué)得除了?JDK?我們用得最多的?Java?中間件就是?Spring?,今天我們一起來(lái)學(xué)習(xí)一下?Spring?的循環(huán)依賴。下面詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-02-02
  • Spring?Security?基于URL的權(quán)限判斷源碼解析

    Spring?Security?基于URL的權(quán)限判斷源碼解析

    這篇文章主要介紹了Spring?Security?基于URL的權(quán)限判斷問(wèn)題,我們想要實(shí)現(xiàn)自己的基于請(qǐng)求Url的授權(quán)只需自定義一個(gè)?AccessDecisionManager即可,接下來(lái)跟隨小編一起看看實(shí)現(xiàn)代碼吧
    2021-12-12
  • Java實(shí)現(xiàn)多層文件夾壓縮功能

    Java實(shí)現(xiàn)多層文件夾壓縮功能

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言進(jìn)行多層文件夾壓縮功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08

最新評(píng)論