Java未賦值變量的初始值解析(默認(rèn)值)
Java未賦值變量的初始值(默認(rèn)值)
初始值(默認(rèn)值)
參考:官方文檔
Java程序中,任何變量必須初始化后才能使用。
以下為不同數(shù)據(jù)類型的默認(rèn)值。
數(shù)據(jù)類型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | ‘u0000' |
float | 0.0f |
double | 0 |
boolean | false |
所有引用類型 | null |
但并不是所有未初始化的變量都會(huì)賦默認(rèn)值。
對(duì)應(yīng)的面試編程題:以下代碼會(huì)打印什么?
public static void main(String[] args) { int[] arr = new int[10]; System.out.println(arr[0]); } //打?。?0
public static void main(String[] args) { int a; System.out.println(a); } //編譯失敗,提示“Error:(16, 28) java: 可能尚未初始化變量a”
下面根據(jù)不同的變量類型依次說(shuō)明:
實(shí)例變量(非靜態(tài)字段)
系統(tǒng)會(huì)初始化默認(rèn)值
字段未被static修飾就是實(shí)例變量。在創(chuàng)建對(duì)象時(shí),該變量會(huì)在分配內(nèi)存階段被賦予默認(rèn)值,在執(zhí)行new指令之后,被賦予程序定義的初始值。
public class Cat { // 實(shí)例變量 int age; }
類變量(靜態(tài)字段)
系統(tǒng)會(huì)初始化默認(rèn)值
字段被static修飾就是類變量。在類加載的準(zhǔn)備階段,該變量會(huì)被賦予默認(rèn)值,在類加載的初始化階段,會(huì)被賦予程序定義的初始值。
public class Cat { // 類變量 static int age; }
本地變量
系統(tǒng)不會(huì)初始化默認(rèn)值
方法塊中定義的變量為本地變量。該變量必須在代碼中顯示賦值,否則會(huì)提示編譯錯(cuò)誤。
public static void main(String[] args) { // 本地變量 int a = 0; }
參數(shù)
無(wú)需初始化默認(rèn)值
參數(shù)很好理解,如下所示,args就是參數(shù)。參數(shù)又分實(shí)參和形參。參數(shù)的值在調(diào)用該方法時(shí)傳入。
// args 就是參數(shù) public static void main(String[] args) { }
解決java未賦值變量的默認(rèn)值問(wèn)題
如下所示
package demo; import java.util.Arrays; public class demo { /*類字段變量可以不賦初值不報(bào)錯(cuò),其他變量一律要賦初值 * 不管程序有沒(méi)有顯示的初始化,Java 虛擬機(jī)都會(huì)先自動(dòng)給它初始化為默認(rèn)值。 * 1、整數(shù)類型(byte、short、int、long)的基本類型變量的默認(rèn)值為0。 * 2、單精度浮點(diǎn)型(float)的基本類型變量的默認(rèn)值為0.0f。 * 3、雙精度浮點(diǎn)型(double)的基本類型變量的默認(rèn)值為0.0d。 * 4、字符型(char)的基本類型變量的默認(rèn)為 “/u0000”。 * 5、布爾性的基本類型變量的默認(rèn)值為 false。 * 6、引用類型的變量是默認(rèn)值為 null,如int[] a;。 */ public int i1; public static int i2; public int[] a=new int[5];//見(jiàn)main()方法中的int[] b=new int[5]; public static void main(String[] args) { /* 方法中的局部變量,ava 虛擬機(jī)不會(huì)自動(dòng)的為它初始化為默認(rèn)值。 * 因此對(duì)于局部變量,必須先經(jīng)過(guò)顯示的初始化,才能使用它。 * 如果編譯器確認(rèn)一個(gè)局部變量在使用之前可能沒(méi)有被初始化,編譯器將報(bào)錯(cuò)。 */ //int i3; int[] b=new int[5];//數(shù)組變量實(shí)例化后,如果沒(méi)有顯式為每個(gè)元素賦值,Java 就會(huì)把該數(shù)組的所有元素初始化為其相應(yīng)類型的默認(rèn)值 System.out.println(new demo().i1); //輸出0 System.out.println(i2); //輸出0 //System.out.println(i3); //會(huì)報(bào)錯(cuò) System.out.println(Arrays.toString(new demo().a));//此處為int型,默認(rèn)輸出{0,0,0,0,0}。 } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java利用多線程模擬銀行系統(tǒng)存錢問(wèn)題
本文將利用Java多線程模擬銀行系統(tǒng)存錢問(wèn)題:使用兩個(gè)不同的線程向同一個(gè)賬戶存錢。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08Spring Boot 項(xiàng)目中使用Swagger2的示例
本篇文章主要介紹了Spring Boot 項(xiàng)目中使用Swagger2的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Java面向?qū)ο蟪绦蛟O(shè)計(jì):類的定義,靜態(tài)變量,成員變量,構(gòu)造函數(shù),封裝與私有,this概念與用法詳解
這篇文章主要介紹了Java面向?qū)ο箢惖亩x,靜態(tài)變量,成員變量,構(gòu)造函數(shù),封裝與私有,this概念與用法,較為詳細(xì)的分析了Java類的定義,靜態(tài)變量,成員變量,構(gòu)造函數(shù),封裝,私有等相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04SpringBoot項(xiàng)目中公共字段填充的實(shí)現(xiàn)
本文主要介紹了SpringBoot項(xiàng)目中公共字段填充的實(shí)現(xiàn),利用SpringBoot的Aop思想和自定義注解和反射機(jī)制的方法來(lái)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10