您好,登錄后才能下訂單哦!
小編這次要給大家分享的是如何聲明與創(chuàng)建Java數(shù)組,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
首先,數(shù)組有幾種創(chuàng)建方式?
Java程序中的數(shù)組必須先進(jìn)行初始化才可以使用,所謂初始化,就是為數(shù)組對象的元素分配內(nèi)存空間,并為每個(gè)數(shù)組元素指定初始值,而在Java中,數(shù)組是靜態(tài)的,數(shù)組一旦初始化,長度便已經(jīng)確定,不能再隨意更改。
聲明數(shù)組變量
首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。下面是聲明數(shù)組變量的語法:
dataType[] arrayRefVar; // 首選的方法 或 dataType arrayRefVar[]; // 效果相同,但不是首選方法 c++沿用
但是以上只是聲明了數(shù)組,并不能直接使用,因?yàn)闆]有為其分配內(nèi)存空間,此時(shí)必須初始化。
例如以下代碼在Java8中就會(huì)報(bào)錯(cuò)
public class test{ public static void main(String[] arg) { int[] a; a[0]= 1; System.out.println(a[0]); } } // 系統(tǒng)將報(bào)錯(cuò) 局部變量 a 可能尚未初始化 // 進(jìn)一步加入我個(gè)人的理解,聲明的數(shù)組沒有確定大小,沒有辦法分配內(nèi)存空間,所有必須初始化 // 但是以下代碼在Java中是禁止的 public class test{ public static void main(String[] arg) { int[10] a; a[0]= 1; System.out.println(a[0]); } } // 系統(tǒng)將報(bào)錯(cuò) 標(biāo)記“10”上有語法錯(cuò)誤,刪除此標(biāo)記 // 不能像c++這樣初始化數(shù)組
所以,我們擁有兩種初始化數(shù)組的方式
靜態(tài)初始化:由程序猿自己確定每個(gè)數(shù)組元素的初始值,而數(shù)組的長度則由系統(tǒng)自己決定,例如:
int[] a = {1,2,3,4,5}; System.out.println(a.length); // 第二行代碼可以看出,數(shù)組擁有類的性質(zhì),可以用dot訪問其變量 // 第一行代碼靜態(tài)初始化了數(shù)組整型數(shù)組a,賦予其固定的長度,系統(tǒng)可以為其分配空間
動(dòng)態(tài)初始化:初始化時(shí)由程序猿確定數(shù)組的長度,而沒一個(gè)數(shù)組元素的值,則由系統(tǒng)來分配初始值,例如:
int[] b=new int[5]; System.out.println(b[0]); // 很明顯,數(shù)組就是類
數(shù)組一定要初始化嗎?所謂的對數(shù)組初始化究竟是對什么初始化?是數(shù)組變量本身嗎?
答案看上去肯定是一定要,但是我在實(shí)踐中發(fā)現(xiàn)卻是不一定需要,要想搞清楚這個(gè)問題,我們需要理解數(shù)組變量和數(shù)組對象的區(qū)別。而在認(rèn)識(shí)他們之前需要先了解Java的數(shù)據(jù)類型。Java的數(shù)據(jù)類型分為兩種,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
基本數(shù)據(jù)類型有八種:byte,short,int,long,float,double,boolean,char。只需要知道基本數(shù)據(jù)類型變量包含一個(gè)值,這個(gè)值的類型與變量相對應(yīng)。
引用數(shù)據(jù)類型:引用型變量的值與基本類型變量不同,變量值是指向內(nèi)存空間的引用(地址)。所指向的內(nèi)存中保存著變量所表示的一個(gè)值或一組值。這和C++中的指針很相似,事實(shí)上Java語言中的引用實(shí)際上就是指針,是指向一個(gè)對象的內(nèi)存地址。Java所說的不支持指針只是不支持指針的計(jì)算,但是指針類型被保留了下來,并稱為引用類型。聲明引用數(shù)據(jù)類型后,不可以直接使用,還需要實(shí)例化在堆內(nèi)存中開辟內(nèi)存空間。
數(shù)組變量是一個(gè)引用類型的變量,數(shù)組變量是指向堆內(nèi)存當(dāng)中的數(shù)組對象,并不是數(shù)組本身。當(dāng)改變一個(gè)數(shù)組變量所引用的數(shù)組,就可以造成數(shù)組長度可變的假象。實(shí)際上數(shù)組對象本身的長度本沒有變化,只是數(shù)組變量指向了一個(gè)新的數(shù)組對象。
所以對于數(shù)組變量來說,他并不需要初始化,我們常說的初始化其實(shí)是初始化數(shù)組對象而非數(shù)組變量,有時(shí)候我們不進(jìn)行初始化,而讓數(shù)組變量指向一個(gè)有效的數(shù)組對象,數(shù)組也可以使用,例如:
int[] a = {0,1,2,3,4}; int[] b; b = a; System.out.println(b[1]); // 輸出結(jié)果為 1 b[1] = 99; System.out.println(a[1]); // 輸出結(jié)果為 99
我自己的理解是,Java的數(shù)組就是一個(gè)對象。初始化數(shù)組的最好辦法就是new一個(gè)。
數(shù)組的增強(qiáng)循環(huán)(也可用于其他集合)
Java增強(qiáng)循環(huán)語句如下:
for(聲明語句:表達(dá)式){ // 代碼 } // 冒號可以理解為"in"
聲明語句:聲明新的局部變量,該變量的類型必須和數(shù)組元素的類型匹配。其作用域限定在循環(huán)語句塊,其值與此時(shí)數(shù)組元素的值相等(而不是數(shù)組的下標(biāo)!?。?。
表達(dá)式: 表達(dá)式是要訪問的數(shù)組名,或者是返回值為數(shù)組的方法。
實(shí)例
public class Test { public static void main(String args[]){ int [] numbers = {10, 20, 30, 40, 50}; for(int x : numbers ){ System.out.print( x ); System.out.print(","); } System.out.print("\n"); String [] names ={"James", "Larry", "Tom", "Lacy"}; for( String name : names ) { System.out.print( name ); System.out.print(","); } } }
輸出結(jié)果
10,20,30,40,50,
James,Larry,Tom,Lacy,
我們回頭理解其執(zhí)行順序:
Java的變量類型Java中有三種變量類型類變量:獨(dú)立于方法之外的變量,用static修飾實(shí)例變量:獨(dú)立于方法之外的變量,不過沒有static修飾類的每個(gè)對象特定的變量也是實(shí)例對象(顧名思義)局部變量:類的方法中的變量
public class variable{ static int a = 0; // 類變量 String str = "Java is easy to learn."; // 實(shí)例變量 實(shí)例變量聲明在類內(nèi)而不是方法中 public void method{ int b = 1; // 局部變量 局部變量是聲明在方法中的 // 局部變量在使用前必須初始化 int x; int z = x + 1; // 這就是錯(cuò)誤的代碼,無法編譯 } }
聲明與初始化變量類型實(shí)例變量永遠(yuǎn)會(huì)有默認(rèn)值。如果沒有明確的賦值給實(shí)例變量,或者沒有調(diào)用setter,實(shí)例變量仍有默認(rèn)值。
局部變量沒有默認(rèn)值
看完這篇關(guān)于如何聲明與創(chuàng)建Java數(shù)組的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。