教程揭秘 | 動力節(jié)點內(nèi)部Java零基礎(chǔ)教學(xué)文檔第一篇:JavaSE(4)
接上期后續(xù)
本期繼續(xù)分享尚未結(jié)束的JavaSE章節(jié)
JavaSE屬于初入門階段,內(nèi)容很多~
但很基礎(chǔ),
大家需保持耐心,慢慢的學(xué)~
爭取你們學(xué)習(xí)的速度!
跟上我更新的速度哦~

今日新篇章
數(shù)組
【主要內(nèi)容】
1.?數(shù)組的定義和特征
2.?添加和獲取元素操作
3.?增強for循環(huán)
4.?數(shù)組內(nèi)存分配
5.?常見數(shù)組異常
6.?數(shù)組的常見操作
7.?在數(shù)組中刪除元素
8.?在數(shù)組中插入元素
9.?方法的可變參數(shù)
10.?二維數(shù)組
【學(xué)習(xí)目標(biāo)】

1.?數(shù)組概述和特點
1.1?數(shù)組的概念?
數(shù)組概念:數(shù)組就是一種能夠存放相同數(shù)據(jù)類型的有序集合。(通俗來講數(shù)組其實就是一個容器)。
1.2?數(shù)組的創(chuàng)建
1.2.1?動態(tài)創(chuàng)建數(shù)組
語法格式:數(shù)據(jù)類型[] ?數(shù)組名?= new 數(shù)據(jù)類型[數(shù)組長度];
??????數(shù)據(jù)類型??數(shù)組名[] = new 數(shù)據(jù)類型[數(shù)組長度];
注意:數(shù)組的聲明建議大家使用第一種方式,避免數(shù)組名混淆。
【示例】
public?static?void?main(String[] args) {
// 創(chuàng)建3個空間的int類型數(shù)組
int[] arr1?= new?int[3];
// 創(chuàng)建5個空間的String類型數(shù)組
String[] arr2?= new?String[5];
}
1.2.2?靜態(tài)創(chuàng)建數(shù)組
語法格式:數(shù)據(jù)類型[] ?數(shù)組名?= new 數(shù)據(jù)類型[]{元素1, 元素2,?元素3,…};
注意:使用靜態(tài)的方式來創(chuàng)建數(shù)組,數(shù)組的長度由元素個數(shù)來確定。
【示例】
public?static?void?main(String[] args) {
// 創(chuàng)建指定內(nèi)容的int類型數(shù)組
int[] arr1?= new?int[]{1, 2, 3, 4, 5};
// 創(chuàng)建指定內(nèi)容的String類型數(shù)組
String[] arr2?= new?String[]{"11", "22", "33", "44"};
}
除了用new關(guān)鍵字來產(chǎn)生數(shù)組以外,還可以直接在定義數(shù)組的同時就為數(shù)組元素分配空間并賦值。
語法格式:數(shù)據(jù)類型[] ?數(shù)組名?= {元素1, 元素2,?元素3,…};
【示例】
public?static?void?main(String[] args) {
// 創(chuàng)建指定內(nèi)容的int類型數(shù)組
int[] arr1?= {1, 2, 3, 4, 5};
// 創(chuàng)建指定內(nèi)容的String類型數(shù)組
String[] arr2?= {"11", "22", "33", "44"};
}
注意事項:
1、?數(shù)組類型可以是任何數(shù)據(jù)類型,包括基本類型和引用類型,例如String[]和float[]。
2、?數(shù)組中存放元素的類型,必須是創(chuàng)建數(shù)組時指定的類型,不允許出現(xiàn)混合類型。
3、?創(chuàng)建一個數(shù)組時,必須指定數(shù)組長度,創(chuàng)建成功數(shù)組的大小就不可以改變了。
1.3?數(shù)組的基本操作
數(shù)組中的元素,我們可以通過下標(biāo)(索引)來訪問,索引從0開始。
數(shù)組索引的取值范圍為:[0,數(shù)組長度-1],如果超出索引范圍來操作數(shù)組元素,會拋出ArrayIndexOutOfBoundsException異常。
??數(shù)組的賦值操作
【示例】
public?static?void?main(String[] args) {
// 初始化5個空間的int類型數(shù)組
int[] arr?= new?int[5];
// 添加元素
arr[0] = 11; // 給第一個元素賦值
arr[1] = 22; // 給第二個元素賦值
arr[2] = 22; // 給第三個元素賦值
// 修改第二個元素的值
arr[1] = 222;
}
??數(shù)組的取值操作
【示例】
public?static?void?main(String[] args) {
// 創(chuàng)建指定內(nèi)容的int類型數(shù)組
int[] arr?= {1, 2, 3, 4, 5};
// 獲取元素
int?num1?= arr[0]; // 獲取第一個元素
int?num2?= arr[1]; // 獲取第二個元素
int?num3?= arr[2]; // 獲取第三個元素
}
??獲取數(shù)組的長度
【示例】
public?static?void?main(String[] args) {
// 創(chuàng)建指定內(nèi)容的int類型數(shù)組
int[] arr?= {1, 2, 3, 4, 5};
// 通過length屬性,來獲取數(shù)組的長度
System.out.println(arr.length); // 輸出:5
}
注意事項:
1.?通過length屬性獲取到的數(shù)組長度和開辟的內(nèi)存空間的長度一致。
2.?某些情況下,實際添加元素的個數(shù)(不算默認(rèn)值元素),可能會小于了數(shù)組的長度。
??通過for循環(huán)遍歷數(shù)組
【示例】
public?static?void?main(String[] args) {
// 創(chuàng)建指定內(nèi)容的int類型數(shù)組
int[] arr?= {1, 2, 3, 4, 5};
// 通過length屬性,獲取數(shù)組元素的個數(shù)
int?length?= arr.length;
// 通過for循環(huán),遍歷數(shù)組所有元素
for(int?i?= 0; i?< length; i++) {
// 通過下標(biāo)獲取數(shù)組中的元素
System.out.println("第"+(i+1)+"個元素值:"?+ arr[i]);
}
}
??通過索引操作數(shù)組原理
因為數(shù)組的內(nèi)存空間是連續(xù)的,我們通過數(shù)組的首地址+索引就能快速的找到數(shù)組對應(yīng)的元素值,從而得出數(shù)組的優(yōu)點:查找快。
?
索引操作數(shù)組原理:數(shù)組首地址 + 存放數(shù)據(jù)的字節(jié)數(shù)*索引。
【隨堂練習(xí)】
1、 獲取10個學(xué)生的成績,然后保存在數(shù)組中,最后計算學(xué)生的總分和平均分。
1.4?數(shù)組的默認(rèn)初始化
數(shù)組是引用類型,只要數(shù)組一經(jīng)分配空間,那么數(shù)組中的每個元素都會被隱式的設(shè)置一個默認(rèn)值。
以下是針對不同數(shù)據(jù)類型的默認(rèn)值:
1、整數(shù)類型(byte、short、int、long)的基本類型變量的默認(rèn)值為0。
2、浮點型(float、double)的基本類型變量的默認(rèn)值為0.0。
3、字符型(char)的基本類型變量的默認(rèn)為 “\u0000”。
4、布爾性的基本類型變量的默認(rèn)值為 false。
5、引用類型的變量是默認(rèn)值為 null(null就是空對象)。
2.?JVM中的堆和棧
2.1?堆和棧的概述
JVM是基于堆棧的虛擬機,堆棧是一種數(shù)據(jù)結(jié)構(gòu),是用來存儲數(shù)據(jù)的。對于一個Java程序來說,它的運行就是通過對堆棧的操作來完成的。
【棧內(nèi)存stack】
棧內(nèi)存:用來存放局部變量。
當(dāng)在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內(nèi)存空間,當(dāng)超過變量的作用域后,Java會自動釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。?
棧內(nèi)存特點:
1.?棧內(nèi)存存儲特性為:“先進后出,后進先出”。
2.?棧是一個連續(xù)的內(nèi)存空間,由系統(tǒng)自動分配,速度快!
3.?虛擬機會為每個線程創(chuàng)建一個棧,用于存放該線程執(zhí)行方法的信息。
【堆內(nèi)存heap】
堆內(nèi)存:用來存儲創(chuàng)建好的對象和數(shù)組(數(shù)組也是對象)
在堆中產(chǎn)生了一個數(shù)組或?qū)ο蠛?,還可以在棧中定義一個特殊的變量,讓棧中這個變量的取值等于數(shù)組或?qū)ο笤诙褍?nèi)存中的首地址,棧中的這個變量就成了數(shù)組或?qū)ο蟮囊米兞俊?
引用變量就相當(dāng)于是為數(shù)組或?qū)ο笃鸬囊粋€名稱,以后就可以在程序中使用棧中的引用變量來訪問堆中的數(shù)組或?qū)ο蟆?
數(shù)組和對象在沒有引用變量指向它的時候,數(shù)組或?qū)ο蟊旧碚加玫亩褍?nèi)存就變成垃圾,不能再被使用,然后由Java虛擬機的自動垃圾回收器來管理釋放該內(nèi)存。?
堆內(nèi)存特點:
1.?虛擬機中只有一個堆,被所有的線程共享。
2.?堆是一個不連續(xù)的內(nèi)存空間,分配靈活,但速度慢!
【思考一】
public?static?void?main(String[] args) {
int[] arr1?= {1, 2, 3, 4, 5};
int[] arr2?= arr1;
arr2[2] = 33;
System.out.println(arr1[2]); // 輸出結(jié)果為???
}
【思考二】
public?static?void?main(String[] args) {
int[] arr1?= {1, 2, 3};
int[] arr2?= arr1;
arr1?= null;
System.out.println(arr1[2]); // 輸出結(jié)果為???
System.out.println(arr2[2]); // 輸出結(jié)果為???
}
2.2?數(shù)據(jù)類型傳遞
java中沒有指針(所以沒有引用傳遞),方法中所有參數(shù)都是值傳遞, 傳遞的是值的副本。
2.2.1?基本數(shù)據(jù)類型傳遞
實際參數(shù)把它的值傳遞給對應(yīng)的形式參數(shù),方法執(zhí)行中形式參數(shù)值的改變不影響實際參數(shù)的值。
【示例】交換兩個變量的值
public?class?ObjectDemo {
public?static?void?main(String[] args) {
int?a?= 10, b?= 20;
// 輸出:交換之前:a:10 b: 20
System.out.println("交換之前:a:"?+ a?+ " b: "?+ b);
// 交換變量a和b的值
swap(a, b);
// 輸出:交換之后:a:10 b: 20
System.out.println("交換之后:a:"?+ a?+ " b: "?+ b);
}
//?交換兩個變量的值
public?static?void?swap(int?num1, int?num2) {
int?temp?= num1;
num1?= num2;
num2?= temp;
}
}
總結(jié): 方法調(diào)用時,實參把值拷貝給形參,在函數(shù)中交換的是那份拷貝的值,而不是實參數(shù)據(jù)本身。所以方法內(nèi)部修改形參的值, 在方法外部的實參不會跟著形參一起改變。
2.2.2?引用數(shù)據(jù)類型傳遞
實際參數(shù)把它的值傳遞給對應(yīng)的形式參數(shù),方法執(zhí)行中形式參數(shù)的改變直接影響實際參數(shù)。
【示例】交換兩個變量的值
public class Test {
????public static void main(String[] args) {
????????// 定義一個數(shù)組,用于交換兩個數(shù)組元素的值
????????int[] arr = {11, 22};
????????// 交換之前,輸出數(shù)組元素值
????????System.out.println("交換之前:arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
????????// 調(diào)用方法,執(zhí)行交換元素值的操作
????????swap(arr);
????????// 交換之后,輸出數(shù)組元素值
????????System.out.println("交換之后:arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
????}
????// 交換arr數(shù)組索引0和索引1的元素值
????public static void swap(int[] arr) {
????????int temp = arr[0];
????????arr[0] = arr[1];
????????arr[1] = temp;
????}
}
方法調(diào)用時,實參存放的地址被傳遞給方法中相對應(yīng)的形參,因此形參和實參都指向堆中同一塊地址,在方法執(zhí)行中,對形參的操作實際上就是對實參的操作。所以在方法操作形式參數(shù),那么方法外部的實參也會跟著一起改變。
3.?數(shù)組常見操作
3.1?獲取數(shù)組的最值
需求:獲取數(shù)組{5, 12, 90, 18, 77, 76, 45, 28, 59, 72}的最大值,也就是該數(shù)組的元素90。
實現(xiàn):先假設(shè)第一個元素就是最大值,并賦值給maxValue變量保存,然后依次取出數(shù)組中的元素和maxValue作比較,如果取出元素大于maxValue,那么把該元素設(shè)置為最大值。
【示例】
/**
* 獲取數(shù)組的最大值
* @param?arr 需要查詢的數(shù)組
* @return?返回查詢到的最大值
*/
public?static?int?maxElement(int[] arr) {
// 假設(shè)第一個元素的值就是最大值
int?max?= arr[0];
// 遍歷數(shù)組元素,依次和假設(shè)的最大值作比較
for(int?i?= 1; i?< arr.length; i++) {
// 取出每個元素的值和value作比較
if(arr[i] > max) {
// 推翻假設(shè),更新最大值
max?= arr[i];
}
}
return?max;
}
思考:獲取數(shù)組中最大值的索引,我們該怎么去做呢?
3.2?通過值獲取索引
需求:獲取元素59在數(shù)組{5, 12, 90, 18, 77, 76, 45, 28, 59, 72}中的索引。
實現(xiàn):通過for循環(huán)來遍歷數(shù)組,把需要查詢的值和數(shù)組中的元素一一做比較,如果需要查詢的值和某個元素相等,則返回索引值并結(jié)束方法。如果循環(huán)完畢都沒查找到,則返回-1。
【示例】
/**
* 根據(jù)value值,獲取它在數(shù)組中的索引位置
* @param?arr 需要查詢的數(shù)組
* @param?value 需要判斷的值
* @return?找到,則返回對應(yīng)的索引;未找到,則返回-1
*/
public?static?int?search(int[] arr, int?value) {
// 遍歷數(shù)組,把數(shù)組中的元素依次和value作比較
for(int?i?= 0; i?< arr.length; i++) {
// 取出元素值和value作比較
if(arr[i] == value) {
return?i; // 找到相同的元素,返回索引位置
}
}
// 未找到,則返回-1
return?-1;
}
3.3?數(shù)組元素的反轉(zhuǎn)
需求:將數(shù)組元素反轉(zhuǎn),原數(shù)組{5, 12, 90, 18, 77, 76, 45, 28, 59, 72},反轉(zhuǎn)后為{72, 59, 28, 45, 76, 77, 18, 90, 12, 5}。
實現(xiàn)(一):引入一個外部數(shù)組變量,用于保存反序后的數(shù)組,然后把原數(shù)組中的元素倒序保存于新創(chuàng)建的數(shù)組中。
【示例一】
/**
* 將數(shù)組反序輸出
* @param?arr 需要反序的數(shù)組
* @return?返回反序后的數(shù)組
*/
public?static?int[] reverseOrderArray(int[] arr) {
// 定義一個反序后的數(shù)組
int[] desArr?= new?int[arr.length];
// 把原數(shù)組元素倒序遍歷
for(int?i?= 0; i?< arr.length; i++) {
// 把arr的第i個元素賦值給desArr的最后第i個元素中
desArr[arr.length?- 1 - i] = arr[i];
}
// 返回倒序后的數(shù)組
return?desArr;
}
實現(xiàn)(二):直接對數(shù)組中的元素進行收尾交換。
【示例二】
/**
* 將數(shù)組反序輸出
* @param?arr 需要反序的數(shù)組
*/
public?static?void?reverseOrderArray(int[] arr) {
// 把原數(shù)組元素倒序遍歷
for(int?i?= 0; i?< arr.length/2; i++) {
// 把數(shù)組中的元素收尾交換
int?temp?= arr[i];
arr[i] = arr[arr.length?- i?- 1];
arr[arr.length?- i?- 1] = temp;
}
}
3.4?數(shù)組元素的刪除
需求:刪除數(shù)組{5, 12, 90, 18, 77, 76, 45, 28, 59, 72}索引為2的元素,刪除后:{5, 12, 18, 77, 76, 45, 28, 59, 72,0}。
實現(xiàn):把數(shù)組索引2以后的元素向前移動一位,最后把數(shù)組的最后一個元素的值設(shè)置為默認(rèn)值(整數(shù)類型的默認(rèn)值為0)。
【示例】
/**
* 根據(jù)索引刪除數(shù)組中的元素
* @param?arr 需要刪除元素的數(shù)組
* @param?index 需要刪除數(shù)組元素的索引
*/
public?static?void?deleteElement(int[] arr, int?index) {
// 第一步:判斷索引是否合法
if(index?< 0 || index?>= arr.length) {
System.out.println("索引越界");
return; // 索引不合法,直接結(jié)束方法
}
// 第二步:從index個元素開始,將后一個元素向前移動一位
for(int?i?= index; i?< arr.length?- 1; i++) {
//?將后一個元素向前移動一位
arr[i] = arr[i?+ 1];
}
// 第三步:將最后一個元素設(shè)置為默認(rèn)值
arr[arr.length?- 1] = 0;
}
數(shù)組的缺點:因為數(shù)組是連續(xù)的內(nèi)存空間,當(dāng)數(shù)組進行刪除和插入操作的時候,效率相對低下!
3.5?數(shù)組元素的插入
需求:在數(shù)組{5, 12, 90, 18, 77, 76, 45, 28, 59, 72}索引為2的位置插入元素222,插入后:{5, 12,?222,?90, 18, 77, 76, 45, 28, 59, 72}。
實現(xiàn):首先準(zhǔn)備給數(shù)組擴容,然后把插入索引位置之后的元素往后移動一位,最后在插入索引的位置插入元素。
【示例】
/**
* 在數(shù)組指定位置插入元素
* @param?arr 需要插入元素的數(shù)組
* @param?index 插入元素的位置
* @param?value 需要插入的元素值
* @return?返回插入元素成功的數(shù)組
*/
public?static?int[] insertElement(int[] arr, int?index, int?value) {
// 第一步:判斷索引是否合法
if(index?< 0 || index?>= arr.length) {
System.out.println("索引越界");
// 拋出一個索引越界異常(異常第六章學(xué)習(xí))。
throw?new?ArrayIndexOutOfBoundsException("索引越界:"+index);
}
// 第二步:給數(shù)組擴容
// 定義一個變量,用于保存實際存放元素的個數(shù)
int size = 10;
// 如果數(shù)組的空間長度等于實際存放元素的個數(shù),則執(zhí)行擴容操作
if (arr.length == size) {
? ?//?創(chuàng)建一個更大的數(shù)組
?????int[] newArr?= new?int[arr.length?+ 1];
?????//?把原數(shù)組中的數(shù)據(jù),復(fù)制給新創(chuàng)建的數(shù)組
?????for?(int?i?= 0; i?< arr.length; i++) {
?????newArr[i] = arr[i];// 拷貝操作
?????}
?????//?讓arr指向堆里面的newArr數(shù)組
?????arr?= newArr;???
}
// 第三步:插入索引位置之后的元素往后移動一位
for?(int?i?= arr.length?- 2; i?>= 2; i--) {
arr[i?+ 1] = arr[i];
}
// 第四步:給index索引位置賦值
arr[index] = value;
// 返回插入元素成功的數(shù)組
return?arr;
}
4.?數(shù)組知識點補充
4.1?for-each循環(huán)遍歷
for-each是java SE 5.0增加了一種功能很強的循環(huán)結(jié)構(gòu),可以用來一次處理數(shù)組中的每個元素(其他類型的元素集合亦可)而不必為指定下標(biāo)值而分心。
這種增強的for-each循環(huán)的語法格式為:
for?(type element : array) {
?System.out.println(element); // 輸出數(shù)組中的每一個元素
}
【示例】
public?static?void?main(String[] args) {
int[] arr?= {1, 2, 3, 4, 5, 6};
// 通過增強for循環(huán)遍歷數(shù)組
for(int?element?: arr) {
// 依次輸出數(shù)組的元素
System.out.println(element);
}
}
優(yōu)點:語法簡潔,比普通for循環(huán)的效率高。
缺點:相比較普通for循環(huán),增強for循環(huán)無法獲得數(shù)組下標(biāo)。
4.2?main方法的形參【了解】
參數(shù)String[] args的作用就是可以在main方法運行前將參數(shù)傳入main方法中。
??從控制臺,輸入編譯執(zhí)行命令時傳參數(shù)
例如下面代碼:

但是此時args[]并沒有賦值,我們需要從控制臺命令行進行賦值,就像這樣:

??在IDEA使用String[] args參數(shù)
在工具欄,選中“Edit Configurations...”

出現(xiàn)以下窗口,在“Program arguments:”窗口中輸入?yún)?shù),最后點擊Apply保存即可。

4.3?方法的可變參數(shù)
可變參數(shù):適用于參數(shù)個數(shù)不確定,但類型確定的情況,java把可變參數(shù)當(dāng)做數(shù)組處理。
我們使用...表示可變長參數(shù),...位于變量類型和變量名之間,前后有無空格都可以。
【示例】

可變參數(shù)的特點:
1、?一個方法中可變參數(shù)最多只能有一個,并且只能出現(xiàn)在參數(shù)列表的最后面。
2、?調(diào)用可變參數(shù)的方法時可以給出任意個參數(shù),在方法體中以數(shù)組的形式訪問可變參數(shù)。
5.?Arrays工具類?
Arrays用于操作數(shù)組工具類,里面定義了常見操作數(shù)組的靜態(tài)方法。
注意:要使用Arrays工具類,必須導(dǎo)入Arrays工具類。
import?java.util.Arrays;
5.1?toString方法?
public?static?String toString(Type[] arr),返回指定數(shù)組內(nèi)容的字符串表示形式。
【示例】
int[] arr?= {3, 5, 1, 7, 6, 2, 4};
// 把數(shù)組轉(zhuǎn)化為字符串輸出
System.out.println(Arrays.toString(arr)); // 輸出:[1, 2, 3, 4, 5, 6]
5.2?equals判斷
public?static?boolean?equals(Type[] a1, Type[] a2), 判斷兩個數(shù)組中的內(nèi)容是否相同。
【示例】
int[] arr1?= {3, 5, 1, 7, 6, 2, 4};
int[] arr2?= {3, 5, 1, 7, 6, 2};
// 判斷兩個數(shù)組的內(nèi)容是否相同
boolean?flag?= Arrays.equals(arr1, arr2);
System.out.println(flag); // 輸出:false
5.3?sort排序
public?static?void?sort(Type[] arr)?,對數(shù)組中的內(nèi)容進行升序排序。
【示例】
int[] arr?= {3, 5, 1, 7, 6, 2, 4};
// 對數(shù)組中的內(nèi)容進行升序排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 輸出:[1, 2, 3, 4, 5, 6, 7]
5.4?二分法查找
public?static?int?binarySearch(Type[] arr, Type?key),查找key在數(shù)組中的索引位置。如果找到,則返回索引位置;如果沒找到,則返回一個負(fù)數(shù)。
注意:在調(diào)用此調(diào)用之前,必須先對數(shù)組進行排序。
【示例】
// 排序好的數(shù)組
int[] arr?= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// 查找6在數(shù)組中的索引位置
int?index?= Arrays.binarySearch(arr, 6);
System.out.println(index); ?// 輸出:6
// 查找18在數(shù)組中的索引位置
index?= Arrays.binarySearch(arr, 18);
System.out.println(index); ?// 輸出:-11,證明沒找到
5.5?fill填充數(shù)組
public?static?void?fill(Type[] a, Type?val),給數(shù)組填充指定內(nèi)容。
【示例】
int[] arr?= new?int[5];
Arrays.fill(arr, 89);
System.out.println(Arrays.toString(arr)); // 輸出:[89, 89, 89, 89, 89]
5.6?數(shù)組拷貝
public?static?Type[] copyOf(Type[] original, Type?newLength),從數(shù)組的第一個元素開始拷貝,拷貝指定長度的數(shù)組,拷貝完成返回一個新的數(shù)組。
【示例】
int[] arr?= {1, 2, 3, 4, 5};
int[] newArr?= Arrays.copyOf(arr, 3);
System.out.println(Arrays.toString(newArr)); ?// 輸出:[1, 2, 3]
public?static?Type[] copyOfRange(Type[] original, int?from, int?to),從指定范圍拷貝數(shù)組,拷貝完成返回一個新的數(shù)組。
【示例】
int[] arr?= {1, 2, 3, 4, 5, 6, 7, 8};
int[] newArr?= Arrays.copyOfRange(arr, 2, 5);
System.out.println(Arrays.toString(newArr)); ??// 輸出:[3, 4, 5]
6.?二維數(shù)組【了解】
6.1?二維數(shù)組的定義
二維數(shù)組本質(zhì)上是以數(shù)組作為數(shù)組元素的數(shù)組,即“數(shù)組的數(shù)組”。(通俗來講二維數(shù)組的每一個元素又是一個一維數(shù)組)
6.2?二維數(shù)組的創(chuàng)建
??創(chuàng)建格式一,創(chuàng)建等長的二維數(shù)組
語法語法:數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[m][n];
m:?表示這個二維數(shù)組的長度。
n:?表示二維數(shù)組中每個元素的長度。
注意以下格式也可以表示二維數(shù)組:
數(shù)據(jù)類型 數(shù)組名[][] = new 數(shù)據(jù)類型[m][n];
數(shù)據(jù)類型[] 數(shù)組名[] = new 數(shù)據(jù)類型[m][n];
??創(chuàng)建格式二,創(chuàng)建不定長二維數(shù)組
語法格式:數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[m][];
m:?表示這個二維數(shù)組的長度。
二維數(shù)組中元素的長度沒有給出,可以動態(tài)的給。
??創(chuàng)建格式三,創(chuàng)建靜態(tài)二維維數(shù)組
基本格式:
數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
簡化格式:
數(shù)據(jù)類型[][] 數(shù)組名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
【隨堂練習(xí)】
1.有三個班級,第一個班級3個學(xué)生,第二個班級4個學(xué)生,第三個班級5個學(xué)生。要求通過鍵盤錄入三個班級學(xué)生的成績,并計算每個班級學(xué)生的的平均成績。
7.?debug調(diào)試基礎(chǔ)
7.1?debug的概述
debug用來追蹤代碼的運行流程,通常在程序運行過程中出現(xiàn)異常,啟用debug模式可以分析定位異常發(fā)生的位置,以及在運行過程中參數(shù)的變化。
7.2?debug的用法
第一步:在可能會出現(xiàn)問題的位置打斷點,也就是在行號右側(cè)單擊打斷點

第二步:通過IDEA進入debug調(diào)試,例如:在main方法左側(cè)行號位置,然后選擇“Debug Xxx.main()”

進入debug調(diào)試后,代碼直接在“斷點”位置停止,此時debug窗口分兩部分:
a)在“Frames”窗口,顯示當(dāng)前代碼的停留位置(類、方法、行號)
b)在“Variabls”窗口,顯示當(dāng)前已經(jīng)存在的變量(可以查看變量的值)

第三步:通過debug調(diào)試來控制代碼的執(zhí)行
F8:直接執(zhí)行下一行代碼。
F7:如果當(dāng)前行代碼有調(diào)用方法,則進入該方法
Shift+F8:結(jié)束當(dāng)前方法,回到方法的調(diào)用位置
Alt+F9:執(zhí)行到下一個斷點位置

第四步:結(jié)束debug調(diào)試,首先取消斷點(單擊斷點位置),然后結(jié)束程序,最后關(guān)閉debug窗口。

更多干貨我們下期再說!
下期會分享
第二章節(jié)
MySQL
相關(guān)知識~
專心學(xué)習(xí)的小伙伴能發(fā)現(xiàn)咱們只分享了一部分!
有關(guān)第一部分完整版可私信小編獲取哦~
