Java未賦值變量的初始值解析(默認值)
Java未賦值變量的初始值(默認值)
初始值(默認值)
參考:官方文檔
Java程序中,任何變量必須初始化后才能使用。
以下為不同數據類型的默認值。
| 數據類型 | 初始值 |
|---|---|
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0L |
| char | ‘u0000' |
| float | 0.0f |
| double | 0 |
| boolean | false |
| 所有引用類型 | null |
但并不是所有未初始化的變量都會賦默認值。
對應的面試編程題:以下代碼會打印什么?
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”
下面根據不同的變量類型依次說明:
實例變量(非靜態(tài)字段)
系統(tǒng)會初始化默認值
字段未被static修飾就是實例變量。在創(chuàng)建對象時,該變量會在分配內存階段被賦予默認值,在執(zhí)行new指令之后,被賦予程序定義的初始值。
public class Cat {
// 實例變量
int age;
}
類變量(靜態(tài)字段)
系統(tǒng)會初始化默認值
字段被static修飾就是類變量。在類加載的準備階段,該變量會被賦予默認值,在類加載的初始化階段,會被賦予程序定義的初始值。
public class Cat {
// 類變量
static int age;
}
本地變量
系統(tǒng)不會初始化默認值
方法塊中定義的變量為本地變量。該變量必須在代碼中顯示賦值,否則會提示編譯錯誤。
public static void main(String[] args) {
// 本地變量
int a = 0;
}
參數
無需初始化默認值
參數很好理解,如下所示,args就是參數。參數又分實參和形參。參數的值在調用該方法時傳入。
// args 就是參數
public static void main(String[] args) {
}
解決java未賦值變量的默認值問題
如下所示
package demo;
import java.util.Arrays;
public class demo {
/*類字段變量可以不賦初值不報錯,其他變量一律要賦初值
* 不管程序有沒有顯示的初始化,Java 虛擬機都會先自動給它初始化為默認值。
* 1、整數類型(byte、short、int、long)的基本類型變量的默認值為0。
* 2、單精度浮點型(float)的基本類型變量的默認值為0.0f。
* 3、雙精度浮點型(double)的基本類型變量的默認值為0.0d。
* 4、字符型(char)的基本類型變量的默認為 “/u0000”。
* 5、布爾性的基本類型變量的默認值為 false。
* 6、引用類型的變量是默認值為 null,如int[] a;。
*/
public int i1;
public static int i2;
public int[] a=new int[5];//見main()方法中的int[] b=new int[5];
public static void main(String[] args) {
/* 方法中的局部變量,ava 虛擬機不會自動的為它初始化為默認值。
* 因此對于局部變量,必須先經過顯示的初始化,才能使用它。
* 如果編譯器確認一個局部變量在使用之前可能沒有被初始化,編譯器將報錯。
*/
//int i3;
int[] b=new int[5];//數組變量實例化后,如果沒有顯式為每個元素賦值,Java 就會把該數組的所有元素初始化為其相應類型的默認值
System.out.println(new demo().i1); //輸出0
System.out.println(i2); //輸出0
//System.out.println(i3); //會報錯
System.out.println(Arrays.toString(new demo().a));//此處為int型,默認輸出{0,0,0,0,0}。
}
}
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的詳細步驟
idea開發(fā)工具一直是java環(huán)境最好用,很受廣大開發(fā)者喜愛,今天通過本文給大家分享最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的詳細步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下2021-06-06
SpringBoot Maven項目中Model間的最佳繼承設計詳解
這篇文章主要為大家詳細介紹了SpringBoot中一個優(yōu)秀Maven項目的各Model間最佳繼承設計的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2024-01-01
Mybatis Plus select 實現(xiàn)只查詢部分字段
這篇文章主要介紹了Mybatis Plus select 實現(xiàn)只查詢部分字段的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Spring MVC 基于URL的映射規(guī)則(注解版)
這篇文章主要介紹了Spring MVC 基于URL的映射規(guī)則(注解版) ,詳細的介紹了幾種方式,有興趣的可以了解一下2017-05-05

