本篇為Java基礎(chǔ)語法【下】,包含程序流程控制、函數(shù)、數(shù)組這三部分內(nèi)容。
程序流程控制
順序結(jié)構(gòu)
判斷結(jié)構(gòu)
三種格式:
/*=======第一種格式=======*/
if(條件表達(dá)式)
{
執(zhí)行語句;
}
/*=======第二種格式=======*/
if(條件表達(dá)式)
{
執(zhí)行語句;
}
else
{
執(zhí)行語句;
}
/*=======第三種格式=======*/
if(條件表達(dá)式)
{
執(zhí)行語句;
}
else if(條件表達(dá)式)
{
執(zhí)行語句;
}
...
else
{
執(zhí)行語句;
}
注意:
if語句后若未寫大括號(hào),那就只能控制離它最近的單條語句。if else與三元運(yùn)算符的區(qū)別在于:三元運(yùn)算符由于是運(yùn)算符,因此必須有結(jié)果。Java語言中語句一般有兩種結(jié)束方式:以分號(hào)
;或后大括號(hào)}結(jié)束,以}結(jié)束的一般為流程控制語句。-
Example1:if語句無控制體的情況
if(false); { System.out.println("Hello World!"); //會(huì)打印Hello World!,實(shí)際上if沒有控制體,大括號(hào)內(nèi)容叫做局部代碼塊 }Example2:局部代碼塊
{ int m = 89; System.out.println("Hello World!..."+m); } System.out.println("Over..."+m); //編譯報(bào)錯(cuò)局部代碼塊一執(zhí)行完,
m變量在內(nèi)存中就會(huì)被釋放,因此局部代碼塊可以定義局部變量的生命周期。為了節(jié)約內(nèi)存空間,在確保后面不會(huì)在使用此變量的情況下,可以使用局部代碼塊的形式,執(zhí)行完后,其空間就會(huì)被騰出來(虛擬機(jī)在內(nèi)存當(dāng)中開辟的空間是有限的,除非在啟動(dòng)虛擬機(jī)的時(shí)候設(shè)置需要的空間)。
選擇結(jié)構(gòu)
格式:
switch(表達(dá)式)
{
case 取值1:
執(zhí)行語句;
break;
case 取值2:
執(zhí)行語句;
break;
...
default:
執(zhí)行語句;
break;
}
特點(diǎn):
switch能判斷的數(shù)據(jù)類型有限,只有四種:byte,short,int,char(Java1.5 為switch增加了枚舉類型,Java1.7 增加了字符串類型)。程序一執(zhí)行到
switch,會(huì)把大括號(hào)內(nèi)所有的語句加載到內(nèi)存中。-
switch中條件放置無順序,但執(zhí)行有順序。
Example1:即使default放在第一位,也會(huì)先判斷caseswitch(表達(dá)式) { default: 執(zhí)行語句; break; case 取值1: 執(zhí)行語句; break; case 取值2: 執(zhí)行語句; break; ... } -
程序遇到滿足條件的值后,如果沒有
break,則會(huì)繼續(xù)向下執(zhí)行,之后的case不再進(jìn)行判斷,直接執(zhí)行里面的語句,直到遇到break或執(zhí)行到大括號(hào)終結(jié)。
Example2int x = 2; swtich(x) { default: System.out.println("d"); //break; case 4: System.out.println("a"); //break; case 1: System.out.println("b"); break; case 3: System.out.println("c"); break; } //輸出結(jié)果為d, a, b -
Example3:多個(gè)值,對(duì)應(yīng)相同執(zhí)行語句
int month = 3; switch(month) { case 3: case 4: System.out.println(month+"月對(duì)應(yīng)的是春季"); break; }執(zhí)行到
case 3,滿足條件,但沒有執(zhí)行語句和break,繼續(xù)往下執(zhí)行并且不判斷,執(zhí)行完case 4中的語句再break。
if和swtich的應(yīng)用:
- if
- 對(duì)具體的值進(jìn)行判斷
- 對(duì)值的區(qū)間進(jìn)行判斷
- 對(duì)運(yùn)算結(jié)果是
boolean類型的表達(dá)式進(jìn)行判斷
- switch
- 對(duì)具體的值進(jìn)行判斷
- 值的個(gè)數(shù)通常是固定的
對(duì)于幾個(gè)固定的值判斷,建議使用switch語句,因?yàn)槠鋾?huì)將具體的答案都加載進(jìn)內(nèi)存,效率相對(duì)高一點(diǎn)。
常用的為if,不建議用switch語句,因?yàn)槠涔δ苄暂^差,且書寫麻煩。
循環(huán)結(jié)構(gòu)
三種格式:
/*=======while語句格式=======*/
while(條件表達(dá)式)
{
執(zhí)行語句;
}
/*=======do while語句格式=======*/
do
{
執(zhí)行語句;
}while(條件表達(dá)式);
/*=======for語句格式=======*/
for(初始化表達(dá)式;循環(huán)條件表達(dá)式;循環(huán)后的操作表達(dá)式)
{
執(zhí)行語句;(循環(huán)體)
}
特點(diǎn):
do while:無論條件是否滿足,循環(huán)體至少執(zhí)行一次。for的三個(gè)表達(dá)式運(yùn)行順序:初始化表達(dá)式只執(zhí)行一次;判斷循環(huán)條件,為真就執(zhí)行循環(huán)體,再執(zhí)行循環(huán)后的操作表達(dá)式,接著繼續(xù)判斷循環(huán)條件,重復(fù)整個(gè)過程,直到條件不滿足為止。while與for可以互換,區(qū)別在于for為了循環(huán)而定義的變量在for循環(huán)結(jié)束就在內(nèi)存中釋放,而while循環(huán)使用的變量在循環(huán)結(jié)束后還可以繼續(xù)使用。最簡單無限循環(huán)格式:
while(true),for(;;),無限循環(huán)存在的原因是并不知道循環(huán)多少次,而是根據(jù)某些條件,來控制循環(huán)(for兩邊的表達(dá)式可以不寫,中間不寫會(huì)默認(rèn)為true)。-
Example1:
while語句錯(cuò)誤寫法while(條件表達(dá)式); //while語句后加分號(hào),會(huì)一直循環(huán) { 執(zhí)行語句; } -
Example2:
for第一和第三個(gè)表達(dá)式的非常規(guī)寫法int x = 1; for(System.out.println("a");x<3;System.out.println("c")) { System.out.println("d"); x++; } //輸出 a d c d c //注意能執(zhí)行成功,只要滿足表達(dá)式的條件即可
應(yīng)用:
Example3: 打印九九乘法表
for(int x = 1; x <= 9; x++)
{
for(int y = 1; y <= x; y++)
{
System.out.print(y + "*" + x + "=" + y * x + "\t"); // "\t":制表符,可以用來對(duì)齊
}
System.out.println();
}
輸出結(jié)果為

常用轉(zhuǎn)義符:
n:回車t:制表符b:退格-
r:按下回車鍵
windows系統(tǒng)中回車符其實(shí)是由rn這兩個(gè)符號(hào)組成的,linux中回車符是n,dos可以識(shí)別n和rn,但是windows的一些軟件中只能識(shí)別rn。
Example4:打印帶雙引號(hào)的hello worldSystem.out.println(""hello world"");//錯(cuò)誤寫法,會(huì)識(shí)別成前兩個(gè)雙引號(hào)為一對(duì) System.out.println("\"hello world\"");//正確寫法Example5:打印帶反斜杠的hello world
System.out.println("\\hello world");
其他流程控制語句
break(跳出):應(yīng)用于選擇結(jié)構(gòu)(swtich)和循環(huán)結(jié)構(gòu)(loop)
contine(繼續(xù)):應(yīng)用于循環(huán)結(jié)構(gòu)(loop)
注意:
這兩個(gè)語句離開應(yīng)用范圍就無意義。
這兩個(gè)語句單獨(dú)存在下面都不可以有語句,因?yàn)閳?zhí)行不到。
-
如果出現(xiàn)了循環(huán)嵌套,
break要跳出指定循環(huán),可以通過標(biāo)號(hào)實(shí)現(xiàn)——標(biāo)號(hào)的出現(xiàn),可以讓這兩個(gè)語句作用于指定的范圍(標(biāo)號(hào)用得并不多)。
Examplexiaoqiang:for(int x=0; x<3; x++) { wangcai:for(int y=0; y<4; y++) { System.our.println("x=" + x); break xiaoqiang; } } xiaoqiang:for(int x=0; x<3; x++) { wangcai:for(int y=0; y<4; y++) { System.our.println("x=" + x); continue xiaoqiang; } }
函數(shù)
函數(shù)的定義
什么是函數(shù)?
- 函數(shù)就是定義在類中的具有特定功能的一段獨(dú)立小程序
- 函數(shù)也稱為方法
函數(shù)的格式:
修飾符 返回值類型 函數(shù)名(參數(shù)類型 形式參數(shù)1, 參數(shù)類型 形式參數(shù)2, ...)
{
執(zhí)行語句;
return 返回值;
}
Example
class FunctionDemo
{
public static void main(String[] args)
{
int c = add(3,4);
System.out.println("c="+c);
}
int add(int a, int b)
{
return a+b;
}
}
編譯報(bào)錯(cuò):無法從靜態(tài)上下文中引用非靜態(tài)方法add(int, int),需要在add()函數(shù)前加static修飾符(注意是在編譯過程中失?。?/p>
函數(shù)的特點(diǎn)
- 定義函數(shù)可以將功能代碼進(jìn)行封裝
- 便于對(duì)該功能進(jìn)行復(fù)用,函數(shù)的出現(xiàn)提高了代碼的復(fù)用性
- 函數(shù)只有被調(diào)用才會(huì)被執(zhí)行
- 對(duì)于函數(shù)沒有具體返回值的情況,返回值類型用關(guān)鍵字
void表示,那么該函數(shù)中的return語句如果在最后一行可以省略不寫
注意:
- 函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(shù)。
- 定義函數(shù)時(shí),函數(shù)的結(jié)果應(yīng)該返回給調(diào)用者,交由調(diào)用者處理。
Example
class Demo
{
public static void main(String[] args)
{
System.out.println(add(3,5));
}
public static void add(int a, int b)
{
System.out.println(a + b);
return;
}
}
編譯出錯(cuò): System.out.println(add(3,5));此處不允許使用void類型。
函數(shù)的應(yīng)用
Example:判斷成績所屬的等級(jí)
public static char getLevel1(int num)
{
char level;
if(num>=90 && num<=100) level = 'A';
else if(num>=80 && num<=89) level = 'B';
else if(num>=70 && num<=79) level = 'C';
else if(num>=60 && num<=69) level = 'D';
else if(num<60) level = 'E';
return level;
}
public static char getLevel2(int num)
{
char level;
if(num>=90 && num<=100) level = 'A';
else if(num>=80 && num<=89) level = 'B';
else if(num>=70 && num<=79) level = 'C';
else if(num>=60 && num<=69) level = 'D';
else if(num<60 || num>100) level = 'E';
return level;
}
兩個(gè)函數(shù)均編譯錯(cuò)誤 :可能尚未初始化變量level;編譯時(shí)不會(huì)判斷數(shù)值(即使涵蓋了所有的情況),只管語法錯(cuò)誤,所以最后應(yīng)加else語句。
函數(shù)的重載(overload)
重載的概念:在同一類中,允許存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可。
重載的特點(diǎn):與返回值類型無關(guān),只看參數(shù)列表。
重載的好處:方便于閱讀,優(yōu)化了程序設(shè)計(jì)(函數(shù)的功能一樣,僅僅是參與運(yùn)算的未知內(nèi)容不同時(shí),可以定義多函數(shù),卻使用統(tǒng)一函數(shù)名稱,這樣方便閱讀,在調(diào)用時(shí),虛擬機(jī)通過參數(shù)列表的不同來區(qū)分同名函數(shù))。
Example1
public static int add(int a, int b)
{
return a+b;
}
public static double add(int a, int b)
{
return a+b;
}
編譯報(bào)錯(cuò):已在XX中定義add(int, int)…,Java是嚴(yán)謹(jǐn)性語言,如果函數(shù)出現(xiàn)調(diào)用的不確定性,會(huì)編譯失敗。
Example2:打印乘法表
/**
打印指定參數(shù)的任意乘法表
*/
public static void printCFB(int num)
{
for(int x=1; x<=num; x++)
{
for(int y=1; y<=x; y++)
{
System.our.print(y+"*"+x+"="+y*x+"t");
}
System.out.println();
}
}
/**
打印標(biāo)準(zhǔn)乘法表(不指定參數(shù)的情況下)
*/
public static void printCFB()
{
for(int x=1; x<=9; x++)
{
for(int y=1; y<=x; y++)
{
System.our.print(y+"*"+x+"="+y*x+"t");
}
System.out.println();
}
}
如上,一般只要一重載,代碼就會(huì)重復(fù);可以通過調(diào)用的方式,減少重復(fù)代碼。
/**
打印指定參數(shù)的任意乘法表
*/
public static void printCFB(int num)
{
for(int x=1; x<=num; x++)
{
for(int y=1; y<=x; y++)
{
System.our.print(y+"*"+x+"="+y*x+"t");
}
System.out.println();
}
}
/**
打印標(biāo)準(zhǔn)乘法表。
*/
public static void printCFB()
{
printCFB(9);
}
一般由于參數(shù)個(gè)數(shù)的原因重載,都能復(fù)用;而如果是參數(shù)類型,則不行。
函數(shù)調(diào)用
棧的形式
數(shù)組
數(shù)組的定義
概念:同一類型數(shù)據(jù)的集合,其實(shí)數(shù)組就是一個(gè)容器。
好處:可以自動(dòng)給數(shù)組中的元素從0開始編號(hào),方便操作這些元素。
格式:
/*=======第一種格式=======*/
元素類型[] 數(shù)組名 = new 元素類型[元素個(gè)數(shù)或數(shù)組長度];
/*=========示例========*/
int[] arr = new int[5];
/*=======第二種格式=======*/
元素類型[] 數(shù)組名 = new 元素類型[]{元素1, 元素2, ...};
/*=========示例========*/
int[] arr = new int[]{3,5,1,7}; //用new,常規(guī)初始化方式
int[] arr = {3,5,1,7}; //靜態(tài)初始化方式
//以上兩種方式在大部分情況下都是通用的,但它們?cè)谥匦沦x值或傳參時(shí)會(huì)有一點(diǎn)小差別
Example
int[] arr = new int[3];
System.out.println(arr[0]);
System.out.println(arr[1]);
//均輸出0(默認(rèn)賦值為0)
數(shù)組的內(nèi)存分配及特點(diǎn)
Java內(nèi)存分為五片:
- 寄存器(CPU使用)
- 本地方法區(qū)(調(diào)用系統(tǒng)底層內(nèi)容)
- 方法區(qū)(別名【數(shù)據(jù)區(qū)、共享區(qū)、share data】,存儲(chǔ)方法)
- 棧內(nèi)存(基本數(shù)據(jù)類型):存儲(chǔ)的都是局部變量,變量所屬的作用域一旦結(jié)束,該變量就會(huì)自動(dòng)釋放。
- 堆內(nèi)存(引用數(shù)據(jù)類 ):存儲(chǔ)數(shù)組和對(duì)象(其實(shí)數(shù)組也是對(duì)象),凡是new建立的對(duì)象都在堆中。
堆的特點(diǎn):
- 每一個(gè)實(shí)體都有首地址值。
- 堆內(nèi)存中的每一個(gè)變量都有默認(rèn)初始化值,根據(jù)類型的不同而不一樣,整數(shù):0,小數(shù):0.0或者0.0f,boolean:false,char :‘u0000’,實(shí)體:null。
- 垃圾回收機(jī)制:當(dāng)堆中的實(shí)體沒有被任何變量指向時(shí),不像棧一樣,會(huì)立刻被釋放,而是會(huì)被視作垃圾,被自動(dòng)回收,垃圾回收機(jī)制會(huì)不定時(shí)的,自動(dòng)檢測(cè)堆里的垃圾,進(jìn)行回收。C++需要程序員手動(dòng)回收堆里的垃圾,析構(gòu)函數(shù)。
Example1
int[] arr = new int[3];
//arr在棧中,new int[3]在堆中,堆中存的是實(shí)體,實(shí)體的用途:用于封裝數(shù)據(jù),存儲(chǔ)很多數(shù)據(jù)

Example2
sytem.out.print(arr[0]);//先找arr,再根據(jù)地址找數(shù)組,找到數(shù)組后找對(duì)應(yīng)的元素
arr = null; //讓arr不指向任何實(shí)體對(duì)象
數(shù)組操作常見問題
Example1:ArrayIndexOutOfBoundsException異常
int[] arr = new int[3];
System.out.println(arr[3]);
編譯完,不會(huì)出錯(cuò),因?yàn)榫幾g時(shí)不會(huì)在內(nèi)存中建立數(shù)組,因此也不會(huì)找角標(biāo)
運(yùn)行時(shí),產(chǎn)生問題,當(dāng)訪問到數(shù)組中不存在的角標(biāo)/索引時(shí),就會(huì)產(chǎn)生ArrayIndexOutOfBoundsException異常。
Example2:NullPointerException異常
int[] arr = new int[3];
arr = null;
System.out.println(arr[0]);
運(yùn)行出錯(cuò),當(dāng)引用型變量沒有任何實(shí)體指向時(shí),還在用其操作實(shí)體,就會(huì)產(chǎn)生NullPointerException異常。
Example3
int[] arr = new int[3];
System.out.println(arr); //[I@c17164
@右邊:哈希值,哈希本身是一種算法,由這個(gè)算法來定義數(shù)組實(shí)體在內(nèi)存中存儲(chǔ)的位置,可以簡單理解為是一個(gè)地址值,windows支持的,Java調(diào)用。
@左邊:代表實(shí)體的類型, [:數(shù)組型, I:int型。
測(cè)試的時(shí)候用,當(dāng)我們不知道這個(gè)變量接收的數(shù)據(jù)是什么類型時(shí),可以打印出來看看。
數(shù)組常見操作
Example1:獲取最值(最大值,最小值)
class Demo
{
public static void main(String[] args)
{
int[] arr = {-34,-19,-11,-109,-3,-56};
int max = getMax(arr);
System.out.println("max="+max);
}
public static int getMax(int[] arr)
{
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max) max = arr[x];
}
return max;
}
}
注意max初始化的問題,若初始化為0,則判斷不出最大值。
Example2-1:選擇排序,特定位置和其他位置比較
public static void selectSort(int[] arr)
{
for(int i = 0; i < arr.length-1; i++)
{
for(int j = i+1; j < arr.length; j++)
{
if(arr[i]>arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//性能問題
//在selectSort中,每次把最小的元素放到固定位置的過程中,會(huì)進(jìn)行大量元素的交換,實(shí)際上只要找到值最小的元素,再與固定位置交換即可
public static void selectSort_2(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
int num = arr[x];
int idex = x;
for(int y=x+1; y<arr.length; y++)
{
if(num>arr[y])
{
num = arr[y];
index = y;
}
}
if(index!=x)
{
int temp = arr[x];
arr[x] = arr[index];
arr[index] = temp;
}
}
}
Example2-2:冒泡排序,相鄰元素比較
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)//每次循環(huán)將此次比較的元素中最大的元素移到此次序列的最后
{
for(int y=0; y<arr.length-1-x; y++)//-1避免角標(biāo)越界,-x外循環(huán)增加一次,比較的元素個(gè)數(shù)遞減
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
//數(shù)組中元素的交換可以提取出來,寫作函數(shù)
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void bubbleSort_2(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-1-x; y++)
{
if(arr[y]>arr[y+1])
swap(arr,y,y+1);
}
}
}
//其中的for循環(huán)也可以寫成以下形式
for(int x=arr.length-1; x>0; x--)
{
for(int y=0; y<x; y++)
{
...
}
}
注意:
1、可以通過調(diào)用Arrays.sort(arr);實(shí)現(xiàn)排序功能
2、操作的是同一空間

Example3:折半查找(二分查找)
public static int func(int[] arr, int value)
{
int min, max, mid;
min = 0;
max = arr.length;
mid = (min+max)/2;
while(min <= max)
{
mid = (min+max)/2;//mid = (a+b)>>2;
if(arr[mid] < value)
min = mid+1;
else if(arr[mid] > value)
max = mid-1;
else
return mid;
}
return -1;
}
注意:
給定一個(gè)有序數(shù)組,若往該數(shù)組中存儲(chǔ)一個(gè)元素,并保證數(shù)組仍然是有序的,那么這個(gè)元素存儲(chǔ)的角標(biāo)如何獲取-->return min。
int[] arr = {13,15,19,27,33,45,78,106}; Arrays.binarySearch(arr,45); //若元素存在,返回元素所在的位置; //若元素不存在,返回的是-插入點(diǎn)-1;之所以-1,是因?yàn)楸苊夥祷?,例如Arrays.binarySearch(arr,5)
Example4:進(jìn)制轉(zhuǎn)換:利用與運(yùn)算實(shí)現(xiàn)

public static void main(String[] args)
{
toHex(60);
}
//0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F
//0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
public static void toHex(int num)
{
for(int x = 0; x < 8; x++)
{
int temp = num & 15;
if(temp > 9)
System.out.print((char)(temp-10+'A'));
else
System.out.print(temp);
num = num >>> 4;
}
}
/*
什么時(shí)候使用數(shù)組呢?
如果數(shù)據(jù)出現(xiàn)了對(duì)應(yīng)關(guān)系,而且對(duì)應(yīng)關(guān)系的一方是有序的數(shù)字編號(hào),可作為角標(biāo)使用。
將這些數(shù)據(jù)存儲(chǔ)到數(shù)組中,根據(jù)運(yùn)算的結(jié)果作為角標(biāo)直接去查數(shù)組中對(duì)應(yīng)的元素即可。
這種方式:稱為查表法。
(存在對(duì)應(yīng)關(guān)系,但無序,可以使用map)
*/
public static void toHex_2(int num)
{
if(num == 0)
{
System.out.print("0");
return;
}
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr = new char[8];
int pos = arr.length;
while(num != 0)
{
int temp = num & 15;
arr[--pos] = chs[temp];
num = num >>> 4;
}
for(int x = pos; x < arr.length; x++)
{
System.out.print(arr[x]);
}
}
/*十進(jìn)制轉(zhuǎn)二進(jìn)制/八進(jìn)制類似
可以通過函數(shù)調(diào)用的方式,將通用的代碼抽出來
*/
//十進(jìn)制-->十六進(jìn)制
public static void toHex(int num)
{
trans(num,15,4);
}
//十進(jìn)制-->二進(jìn)制
public static void toBinary(int num)
{
trans(num,1,1);
}
//十進(jìn)制-->八進(jìn)制
public static void toOctal(int num)
{
trans(num,7,3);
}
public static void trans(int num, int base, int offset)
{
if(num == 0)
{
System.out.print("0");
return;
}
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr = new char[32];
int pos = arr.length;
while(num != 0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for(int x = pos; x < arr.length; x++)
{
System.out.print(arr[x]);
}
}
注意:可以通過Integer類的方法直接將十進(jìn)制數(shù)轉(zhuǎn)換為對(duì)應(yīng)的進(jìn)制數(shù)
System.out.println(Integer.toBinaryString(-6));
System.out.println(Integer.toHexString(5));
System.out.println(Integer.toOctalString(32));
二維數(shù)組
格式:
格式1:int[][] arr = new int[3][2];
- 定義了名稱為
arr的二維數(shù)組 - 二維數(shù)組中有3個(gè)一維數(shù)組
- 每一個(gè)一維數(shù)組中有2個(gè)元素
- 一維數(shù)組的名稱為
arr[0],arr[1],arr[2] - 給第一個(gè)一維數(shù)組1角標(biāo)位賦值為78寫法:
arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二維數(shù)組中有3個(gè)一維數(shù)組
每個(gè)一維數(shù)組都是默認(rèn)初始化值null
-
可以對(duì)這三個(gè)一維數(shù)組分別進(jìn)行初始化
arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2];
格式3:
int[][] arr = {{3,1,7},{5,8,2,9},{4,6}};
還可以寫成如下方式:
int[][] arr = new int[3][2];
int[] arr[] = new int[3][2];
int arr[][] = new int[3][2];
內(nèi)存圖示:

Example1:直接打印二維數(shù)組
int[][] arr1 = new int[3][2];
System.out.println(arr); //[[I@c17164
System.out.println(arr[0]); //[I@1fb8ee3
System.out.println(arr[0][0]); //0
int[][] arr2 = new int[3][];
System.out.println(arr); //[[I@c17164
System.out.println(arr[0]); //null
System.out.println(arr[0][0]); //NullPointerException
Example2:數(shù)組長度
System.out.println(arr.length); //打印二維數(shù)組的長度-->就是一維數(shù)組的個(gè)數(shù)。
System.out.println(arr[1].length); //打印二維數(shù)組中角標(biāo)為1的一維數(shù)組的長度。