本篇為Java基礎(chǔ)語法【下】,包含程序流程控制、函數(shù)、數(shù)組這三部分內(nèi)容饼丘。
程序流程控制
順序結(jié)構(gòu)
判斷結(jié)構(gòu)
三種格式:
/*=======第一種格式=======*/
if(條件表達式)
{
執(zhí)行語句;
}
/*=======第二種格式=======*/
if(條件表達式)
{
執(zhí)行語句;
}
else
{
執(zhí)行語句;
}
/*=======第三種格式=======*/
if(條件表達式)
{
執(zhí)行語句;
}
else if(條件表達式)
{
執(zhí)行語句;
}
...
else
{
執(zhí)行語句;
}
注意:
if
語句后若未寫大括號,那就只能控制離它最近的單條語句辽话。if else
與三元運算符的區(qū)別在于:三元運算符由于是運算符肄鸽,因此必須有結(jié)果。Java語言中語句一般有兩種結(jié)束方式:以分號
;
或后大括號}
結(jié)束油啤,以}
結(jié)束的一般為流程控制語句典徘。-
Example1:if語句無控制體的情況
if(false); { System.out.println("Hello World!"); //會打印Hello World!,實際上if沒有控制體益咬,大括號內(nèi)容叫做局部代碼塊 }
Example2:局部代碼塊
{ int m = 89; System.out.println("Hello World!..."+m); } System.out.println("Over..."+m); //編譯報錯
局部代碼塊一執(zhí)行完逮诲,
m
變量在內(nèi)存中就會被釋放,因此局部代碼塊可以定義局部變量的生命周期幽告。為了節(jié)約內(nèi)存空間梅鹦,在確保后面不會在使用此變量的情況下,可以使用局部代碼塊的形式冗锁,執(zhí)行完后齐唆,其空間就會被騰出來(虛擬機在內(nèi)存當中開辟的空間是有限的,除非在啟動虛擬機的時候設(shè)置需要的空間)冻河。
選擇結(jié)構(gòu)
格式:
switch(表達式)
{
case 取值1:
執(zhí)行語句;
break;
case 取值2:
執(zhí)行語句;
break;
...
default:
執(zhí)行語句;
break;
}
特點:
switch
能判斷的數(shù)據(jù)類型有限箍邮,只有四種:byte
,short
,int
,char
(Java1.5 為switch
增加了枚舉類型,Java1.7 增加了字符串類型)叨叙。程序一執(zhí)行到
switch
锭弊,會把大括號內(nèi)所有的語句加載到內(nèi)存中。-
switch中條件放置無順序摔敛,但執(zhí)行有順序。
Example1:即使default放在第一位全封,也會先判斷caseswitch(表達式) { default: 執(zhí)行語句; break; case 取值1: 執(zhí)行語句; break; case 取值2: 執(zhí)行語句; break; ... }
-
程序遇到滿足條件的值后马昙,如果沒有
break
,則會繼續(xù)向下執(zhí)行刹悴,之后的case
不再進行判斷行楞,直接執(zhí)行里面的語句,直到遇到break
或執(zhí)行到大括號終結(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:多個值子房,對應(yīng)相同執(zhí)行語句
int month = 3; switch(month) { case 3: case 4: System.out.println(month+"月對應(yīng)的是春季"); break; }
執(zhí)行到
case 3
,滿足條件,但沒有執(zhí)行語句和break
证杭,繼續(xù)往下執(zhí)行并且不判斷田度,執(zhí)行完case 4
中的語句再break
。
if
和swtich
的應(yīng)用:
- if
- 對具體的值進行判斷
- 對值的區(qū)間進行判斷
- 對運算結(jié)果是
boolean
類型的表達式進行判斷
- switch
- 對具體的值進行判斷
- 值的個數(shù)通常是固定的
對于幾個固定的值判斷解愤,建議使用switch
語句镇饺,因為其會將具體的答案都加載進內(nèi)存,效率相對高一點送讲。
常用的為if奸笤,不建議用switch
語句,因為其功能性較差哼鬓,且書寫麻煩监右。
循環(huán)結(jié)構(gòu)
三種格式:
/*=======while語句格式=======*/
while(條件表達式)
{
執(zhí)行語句;
}
/*=======do while語句格式=======*/
do
{
執(zhí)行語句;
}while(條件表達式);
/*=======for語句格式=======*/
for(初始化表達式;循環(huán)條件表達式;循環(huán)后的操作表達式)
{
執(zhí)行語句;(循環(huán)體)
}
特點:
do while
:無論條件是否滿足,循環(huán)體至少執(zhí)行一次异希。for
的三個表達式運行順序:初始化表達式只執(zhí)行一次健盒;判斷循環(huán)條件,為真就執(zhí)行循環(huán)體宠互,再執(zhí)行循環(huán)后的操作表達式味榛,接著繼續(xù)判斷循環(huán)條件,重復(fù)整個過程予跌,直到條件不滿足為止搏色。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
兩邊的表達式可以不寫骄蝇,中間不寫會默認為true
)膳殷。-
Example1:
while
語句錯誤寫法while(條件表達式); //while語句后加分號,會一直循環(huán) { 執(zhí)行語句; }
-
Example2:
for
第一和第三個表達式的非常規(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í)行成功九火,只要滿足表達式的條件即可
應(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":制表符赚窃,可以用來對齊
}
System.out.println();
}
輸出結(jié)果為
常用轉(zhuǎn)義符:
n
:回車t
:制表符b
:退格-
r
:按下回車鍵
windows系統(tǒng)中回車符其實是由rn
這兩個符號組成的,linux中回車符是n
岔激,dos可以識別n
和rn
勒极,但是windows的一些軟件中只能識別rn
。
Example4:打印帶雙引號的hello worldSystem.out.println(""hello world"");//錯誤寫法虑鼎,會識別成前兩個雙引號為一對 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)
注意:
這兩個語句離開應(yīng)用范圍就無意義辱匿。
這兩個語句單獨存在下面都不可以有語句键痛,因為執(zhí)行不到。
-
如果出現(xiàn)了循環(huán)嵌套匾七,
break
要跳出指定循環(huán)絮短,可以通過標號實現(xiàn)——標號的出現(xiàn),可以讓這兩個語句作用于指定的范圍(標號用得并不多)乐尊。
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ù)就是定義在類中的具有特定功能的一段獨立小程序
- 函數(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;
}
}
編譯報錯:無法從靜態(tài)上下文中引用非靜態(tài)方法add(int, int)
,需要在add()
函數(shù)前加static
修飾符(注意是在編譯過程中失斎忧丁)限府。
函數(shù)的特點
- 定義函數(shù)可以將功能代碼進行封裝
- 便于對該功能進行復(fù)用,函數(shù)的出現(xiàn)提高了代碼的復(fù)用性
- 函數(shù)只有被調(diào)用才會被執(zhí)行
- 對于函數(shù)沒有具體返回值的情況痢缎,返回值類型用關(guān)鍵字
void
表示胁勺,那么該函數(shù)中的return
語句如果在最后一行可以省略不寫
注意:
- 函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(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;
}
}
編譯出錯: System.out.println(add(3,5));
此處不允許使用void
類型案疲。
函數(shù)的應(yīng)用
Example:判斷成績所屬的等級
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;
}
兩個函數(shù)均編譯錯誤 :可能尚未初始化變量level
;編譯時不會判斷數(shù)值(即使涵蓋了所有的情況)麻养,只管語法錯誤褐啡,所以最后應(yīng)加else
語句。
函數(shù)的重載(overload)
重載的概念:在同一類中鳖昌,允許存在一個以上的同名函數(shù)备畦,只要它們的參數(shù)個數(shù)或者參數(shù)類型不同即可。
重載的特點:與返回值類型無關(guān)许昨,只看參數(shù)列表懂盐。
重載的好處:方便于閱讀,優(yōu)化了程序設(shè)計(函數(shù)的功能一樣糕档,僅僅是參與運算的未知內(nèi)容不同時莉恼,可以定義多函數(shù),卻使用統(tǒng)一函數(shù)名稱速那,這樣方便閱讀俐银,在調(diào)用時,虛擬機通過參數(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;
}
編譯報錯:已在XX中定義add(int, int)
…悉患,Java是嚴謹性語言残家,如果函數(shù)出現(xiàn)調(diào)用的不確定性榆俺,會編譯失敗。
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();
}
}
/**
打印標準乘法表(不指定參數(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();
}
}
如上,一般只要一重載茴晋,代碼就會重復(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();
}
}
/**
打印標準乘法表市袖。
*/
public static void printCFB()
{
printCFB(9);
}
一般由于參數(shù)個數(shù)的原因重載,都能復(fù)用烁涌;而如果是參數(shù)類型苍碟,則不行。
函數(shù)調(diào)用
棧的形式
數(shù)組
數(shù)組的定義
概念:同一類型數(shù)據(jù)的集合撮执,其實數(shù)組就是一個容器微峰。
好處:可以自動給數(shù)組中的元素從0開始編號,方便操作這些元素抒钱。
格式:
/*=======第一種格式=======*/
元素類型[] 數(shù)組名 = new 元素類型[元素個數(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)初始化方式
//以上兩種方式在大部分情況下都是通用的,但它們在重新賦值或傳參時會有一點小差別
Example
int[] arr = new int[3];
System.out.println(arr[0]);
System.out.println(arr[1]);
//均輸出0(默認賦值為0)
數(shù)組的內(nèi)存分配及特點
Java內(nèi)存分為五片:
- 寄存器(CPU使用)
- 本地方法區(qū)(調(diào)用系統(tǒng)底層內(nèi)容)
- 方法區(qū)(別名【數(shù)據(jù)區(qū)谋币、共享區(qū)仗扬、share data】,存儲方法)
- 棧內(nèi)存(基本數(shù)據(jù)類型):存儲的都是局部變量蕾额,變量所屬的作用域一旦結(jié)束早芭,該變量就會自動釋放。
- 堆內(nèi)存(引用數(shù)據(jù)類 ):存儲數(shù)組和對象(其實數(shù)組也是對象)凡简,凡是new建立的對象都在堆中逼友。
堆的特點:
- 每一個實體都有首地址值。
- 堆內(nèi)存中的每一個變量都有默認初始化值秤涩,根據(jù)類型的不同而不一樣帜乞,整數(shù):0,小數(shù):0.0或者0.0f筐眷,boolean:false黎烈,char :‘u0000’,實體:null匀谣。
- 垃圾回收機制:當堆中的實體沒有被任何變量指向時照棋,不像棧一樣,會立刻被釋放武翎,而是會被視作垃圾烈炭,被自動回收,垃圾回收機制會不定時的宝恶,自動檢測堆里的垃圾符隙,進行回收趴捅。C++需要程序員手動回收堆里的垃圾,析構(gòu)函數(shù)霹疫。
Example1
int[] arr = new int[3];
//arr在棧中拱绑,new int[3]在堆中,堆中存的是實體丽蝎,實體的用途:用于封裝數(shù)據(jù)猎拨,存儲很多數(shù)據(jù)
Example2
sytem.out.print(arr[0]);//先找arr,再根據(jù)地址找數(shù)組屠阻,找到數(shù)組后找對應(yīng)的元素
arr = null; //讓arr不指向任何實體對象
數(shù)組操作常見問題
Example1:ArrayIndexOutOfBoundsException
異常
int[] arr = new int[3];
System.out.println(arr[3]);
編譯完红省,不會出錯,因為編譯時不會在內(nèi)存中建立數(shù)組国觉,因此也不會找角標
運行時类腮,產(chǎn)生問題,當訪問到數(shù)組中不存在的角標/索引時蛉加,就會產(chǎn)生ArrayIndexOutOfBoundsException
異常蚜枢。
Example2:NullPointerException
異常
int[] arr = new int[3];
arr = null;
System.out.println(arr[0]);
運行出錯,當引用型變量沒有任何實體指向時针饥,還在用其操作實體厂抽,就會產(chǎn)生NullPointerException
異常。
Example3
int[] arr = new int[3];
System.out.println(arr); //[I@c17164
@
右邊:哈希值丁眼,哈希本身是一種算法筷凤,由這個算法來定義數(shù)組實體在內(nèi)存中存儲的位置藐守,可以簡單理解為是一個地址值,windows支持的卢厂,Java調(diào)用惠啄。
@
左邊:代表實體的類型, [
:數(shù)組型撵渡, I
:int型。
測試的時候用趋距,當我們不知道這個變量接收的數(shù)據(jù)是什么類型時粒氧,可以打印出來看看。
數(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中,每次把最小的元素放到固定位置的過程中锅纺,會進行大量元素的交換掷空,實際上只要找到值最小的元素,再與固定位置交換即可
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避免角標越界坦弟,-x外循環(huán)增加一次,比較的元素個數(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);
實現(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;
}
注意:
給定一個有序數(shù)組驱入,若往該數(shù)組中存儲一個元素赤炒,并保證數(shù)組仍然是有序的,那么這個元素存儲的角標如何獲取-->return min亏较。
int[] arr = {13,15,19,27,33,45,78,106}; Arrays.binarySearch(arr,45); //若元素存在莺褒,返回元素所在的位置; //若元素不存在雪情,返回的是-插入點-1遵岩;之所以-1,是因為避免返回0巡通,例如Arrays.binarySearch(arr,5)
Example4:進制轉(zhuǎn)換:利用與運算實現(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ù)據(jù)出現(xiàn)了對應(yīng)關(guān)系弥锄,而且對應(yīng)關(guān)系的一方是有序的數(shù)字編號叉讥,可作為角標使用。
將這些數(shù)據(jù)存儲到數(shù)組中罐盔,根據(jù)運算的結(jié)果作為角標直接去查數(shù)組中對應(yīng)的元素即可惶看。
這種方式:稱為查表法。
(存在對應(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]);
}
}
/*十進制轉(zhuǎn)二進制/八進制類似
可以通過函數(shù)調(diào)用的方式本今,將通用的代碼抽出來
*/
//十進制-->十六進制
public static void toHex(int num)
{
trans(num,15,4);
}
//十進制-->二進制
public static void toBinary(int num)
{
trans(num,1,1);
}
//十進制-->八進制
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類的方法直接將十進制數(shù)轉(zhuǎn)換為對應(yīng)的進制數(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個一維數(shù)組
- 每一個一維數(shù)組中有2個元素
- 一維數(shù)組的名稱為
arr[0]
拆座,arr[1]
,arr[2]
- 給第一個一維數(shù)組1角標位賦值為78寫法:
arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二維數(shù)組中有3個一維數(shù)組
每個一維數(shù)組都是默認初始化值null
-
可以對這三個一維數(shù)組分別進行初始化
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ù)組的個數(shù)冠息。
System.out.println(arr[1].length); //打印二維數(shù)組中角標為1的一維數(shù)組的長度挪凑。