本文目錄一覽:
- 1、Java數組初始化,這三種方式有什麼區別
- 2、如何初始化java數組
- 3、java中靜態初始化和動態初始化
- 4、Java類的初始化是什麼時候?
- 5、Java 變量到底要如何初始化
- 6、java 類型類怎麼初始化賦值
Java數組初始化,這三種方式有什麼區別
創建數組的三種方式:其實分為2類,一種是靜態的創建,如方式一。一種是動態的創建,只不過根據寫法的不同分為方式二和方式三:
[java] view plain copy
public static void main(String[] args) {
// 1.方式一 聲明 分配空間並賦值
int[] arr1 = {1,2,3};
// 2.方式二 顯示初始化
int[] arr2;
arr2 = new int[]{1,2,3};
// 3.方式三 顯示初始化()
int[] arr3;
arr3 = new int[3];
}
他們的區別,方式一:在聲明的時候直接就已經分配空間,並賦值,方式一是不能寫成如下這種形式的。
[java] view plain copy
int[] arr1;
arr1 = {1,2,3};//錯誤寫法 編譯不同過
方式二和方式三,聲明和內存分配是分開的,如上面的例子,
[java] view plain copy
int[] arr2; 和 int[] arr3;
這一步是在棧空間分配一個引用,存放的是一個引用,null
[java] view plain copy
arr2 = new int[]{1,2,3};span style=”font-family: Arial, Helvetica, sans-serif;”arr3 = new int[3];/span
到這一步的時候jvm才開始在內存堆區域分配空間,並賦值,方式二直接賦值 1,2,3 方式三 默認初始化,基本類型是 0 布爾類型是 false 引用類型為null,
註:內存一旦分配不能改變,所有說數組長度固定
如何初始化java數組
Java 數組初始化的兩種方法:
1、靜態初始化: 程序員在初始化數組時為數組每個元素賦值;
2、動態初始化: 數組初始化時,程序員只指定數組的長度,由系統為每個元素賦初值。
代碼如下:
[java] view plain copy print?
public class ArrayInit {
public static void main(String[] args) {
//靜態初始化數組:方法一
String cats[] = new String[] {
“Tom”,”Sam”,”Mimi”
};
//靜態初始化數組:方法二
String dogs[] = {“Jimmy”,”Gougou”,”Doggy”};
//動態初始化數據
String books[] = new String[2];
books[0] = “Thinking in Java”;
books[1] = “Effective Java”;
System.out.println(cats.length);
System.out.println(dogs.length);
System.out.println(books.length);
}
}
java中靜態初始化和動態初始化
靜態初始化就是static,動態初始化就是new
所謂的靜態和動態是相對於程序運行是而言的,靜態是在程序編譯時就初始化好了的,動態初始化是在程序運行是才動態分配內存空間,
我覺得已經夠通俗的了
Java類的初始化是什麼時候?
我們知道一個類(class)要被使用必須經過裝載,連接,初始化這樣的過程。下面先對這三階段做一個簡單的描述,之後會結合一個簡單的例子來說明java中類的初始化過程。
在裝載階段,類裝載器(Bootstrap ClassLoader 或者用戶自定義的ClassLoader) 把編譯形成的class文件載入內存,創建類相關的Class對象,這個Class對象封裝了我們要使用的類的類型信息。
連接階段又可以分為三個子步驟:驗證、準備和解析。
驗證就是要確保java類型數據格式 的正確性,並適於JVM使用。
準備階段,JVM為靜態變量分配內存空間,並設置默認值,注意,這裡是設置默認值,比如說int型的變量會被賦予默認值0 。在這個階段,JVM可能還會為一些數據結構分配內存,目的 是提高運行程序的性能,比如說方法表。
解析過程就是在類型的常量池中尋找類、接口、字段和方法的符號引用,把這些符號引用替換成直接引用。這個階段可以被推遲到初始化之後,當程序運行的過程中真正使用某個符號引用的時候 再去解析它。
類會在首次被“主動使用”時執行初始化,為類(靜態)變量賦予正確的初始值。在Java代碼中,一個正確的初始值是通過類變量初始化語句或者靜態初始化塊給出的。而我們這裡所說的主動使用 包括:
1. 創建類的實例
2. 調用類的靜態方法
3. 使用類的非常量靜態字段
4. 調用Java API中的某些反射方法
5. 初始化某個類的子類
6. 含有main()方法的類啟動時
初始化一個類包括兩個步驟:
1、 如果類存在直接父類的話,且直接父類還沒有被初始化,則先初始化其直接父類
2、 如果類存在一個初始化方法,就執行此方法
註:初始化接口並不需要初始化它的父接口。
Java 變量到底要如何初始化
不同的變量初始化方法不同。
變量包括:
類的屬性,或者叫值域
方法里的局部變量
方法的參數
對於第一種變量,Java虛擬機會自動進行初始化。如果給出了初始值,則初始化為該初始值。如果沒有給出,則把它初始化為該類型變量的默認初始值。
int類型變量默認初始值為0
float類型變量默認初始值為0.0f
double類型變量默認初始值為0.0
boolean類型變量默認初始值為false
char類型變量默認初始值為0(ASCII碼)
long類型變量默認初始值為0
所有對象引用類型變量默認初始值為null,即不指向任何對象。注意數組本身也是對象,所以沒有初始化的數組引用在自動初始化後其值也是null。
對於兩種不同的類屬性,static屬性與instance屬性,初始化的時機是不同的。instance屬性在創建實例的時候初始化,static屬性在類加載,也就是第一次用到這個類的時候初始化,對於後來的實例的創建,不再次進行初始化。這個問題會在以後的系列中進行詳細討論。
對於第二種變量,必須明確地進行初始化。如果再沒有初始化之前就試圖使用它,編譯器會抗議。如果初始化的語句在try塊中或if塊中,也必須要讓它在第一次使用前一定能夠得到賦值。也就是說,把初始化語句放在只有if塊的條件判斷語句中編譯器也會抗議,因為執行的時候可能不符合if後面的判斷條件,如此一來初始化語句就不會被執行了,這就違反了局部變量使用前必須初始化的規定。但如果在else塊中也有初始化語句,就可以通過編譯,因為無論如何,總有至少一條初始化語句會被執行,不會發生使用前未被初始化的事情。對於try-catch也是一樣,如果只有在try塊里才有初始化語句,編譯部通過。如果在catch或finally里也有,則可以通過編譯。總之,要保證局部變量在使用之前一定被初始化了。所以,一個好的做法是在聲明他們的時候就初始化他們,如果不知道要出事化成什麼值好,就用上面的默認值吧!其實第三種變量和第二種本質上是一樣的,都是方法中的局部變量。只不過作為參數,肯定是被初始化過的,傳入的值就是初始值,所以不需要初始化。
java 類型類怎麼初始化賦值
總結了java數組的初始化的兩種方法如下:
1、最簡單的方法是直接賦值,如:
一維數組:
int[] num = {21,34,2,-9,987,0,-89};//創建一個一維數組,並賦7個初始值
二維數組:
int[][] num2 = {{21,22},{34,35}};//創建一個二維數組,並賦2個初始值
2、先創建一個數組對象出來,再進行循環賦值,如:
一維數組:
int[] num3 = new int[5];//先創建一個5長度的數組對象
for(int i=0;inum3.length;i++){//之後進行循環遍歷對數組進行賦值
num3[i] = i;
}
二維數組:
int[][] num4 = new int[5][2];//先創建一個二維數組對象
for(int i=0;inum3.length;i++){//之後進行循環遍歷對數組進行賦值
for(int j=0;jnum4[i].length;j++){
num4[i][j] = j;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/293111.html