Java學習日誌(第一階段基礎複習)
###05.01_Java語言基礎(陣列概述和定義格式說明)(瞭解)
-
A:為什麼要有陣列(容器)
- 為了儲存同種資料型別的多個值
-
B:陣列概念
- 陣列是儲存同一種資料型別多個元素的集合。也可以看成是一個容器。
- 陣列既可以儲存基本資料型別,也可以儲存引用資料型別。
-
C:陣列定義格式
資料型別[] 陣列名 = new 資料型別[陣列的長度];
###05.02_Java語言基礎(陣列的初始化動態初始化)(掌握) -
A:什麼是陣列的初始化
- 就是為陣列開闢連續的記憶體空間,併為每個陣列元素賦予值
-
B:如何對陣列進行初始化
- a:動態初始化 只指定長度,由系統給出初始化值
- int[] arr = new int[5];
- b:靜態初始化 給出初始化值,由系統決定長度
- a:動態初始化 只指定長度,由系統給出初始化值
-
C:動態初始化的格式:
- 資料型別[] 陣列名 = new 資料型別[陣列長度];
-
D:案例演示
- 輸出陣列名稱和陣列元素
###05.03_Java語言基礎(Java中的記憶體分配以及棧和堆的區別)
- A:棧(掌握)
- 儲存區域性變數
- B:堆(掌握)
- 儲存new出來的陣列或物件
- C:方法區
- 面向物件部分講解
- D:本地方法區
- 和系統相關
- E:暫存器
- 給CPU使用
###05.04_Java語言基礎(陣列的記憶體圖解1一個數組)(掌握)
- 給CPU使用
- A:畫圖演示
- 一個數組
###05.05_Java語言基礎(陣列的記憶體圖解2二個數組)(瞭解)
- A:畫圖演示
- 二個不同的陣列
###05.06_Java語言基礎(陣列的記憶體圖解3三個引用兩個陣列)(瞭解)
- A:畫圖演示
- 三個引用,有兩個陣列的引用指向同一個地址
###05.07_Java語言基礎(陣列的初始化靜態初始化及記憶體圖)(掌握)
- 三個引用,有兩個陣列的引用指向同一個地址
- A:靜態初始化的格式:
- 格式:資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,…};
- 簡化格式:
- 資料型別[] 陣列名 = {元素1,元素2,…};
- B:案例演示
- 對陣列的解釋
- 輸出陣列名稱和陣列元素
- C:畫圖演示
- 一個數組
- 一個數組
###05.08_Java語言基礎(陣列操作的兩個常見小問題越界和空指標)(掌握)
- A:案例演示
- a:ArrayIndexOutOfBoundsException:陣列索引越界異常
- 原因:你訪問了不存在的索引。
- b:NullPointerException:空指標異常
- 原因:陣列已經不在指向堆記憶體了。而你還用陣列名去訪問元素。
- int[] arr = {1,2,3};
- arr = null;
- System.out.println(arr[0]);
- a:ArrayIndexOutOfBoundsException:陣列索引越界異常
###05.09_Java語言基礎(陣列的操作1遍歷)(掌握)
- A:案例演示
-
陣列遍歷:就是依次輸出陣列中的每一個元素。
-
陣列的屬性:arr.length陣列的長度
-
陣列的最大索引:arr.length - 1;
public static void print(int[] arr) { for (int i = 0;i < arr.length ;i++ ) { System.out.print(arr[i] + " "); } }
-
###05.10_Java語言基礎(陣列的操作2獲取最值)(掌握)
- A:案例演示
-
陣列獲取最值(獲取陣列中的最大值最小值)
public static int getMax(int[] arr) { int max = arr[0]; for (int i = 1;i < arr.length ;i++ ) { //從陣列的第二個元素開始遍歷 if (max < arr[i]) { //如果max記錄的值小於的陣列中的元素 max = arr[i]; //max記錄住較大的 } } return max; }
-
###05.11_Java語言基礎(陣列的操作3反轉)(掌握)
- A:案例演示
-
陣列元素反轉(就是把元素對調)
public static void reverseArray(int[] arr) { for (int i = 0;i < arr.length / 2 ; i++) { //arr[0]和arr[arr.length-1-0]交換 //arr[1]和arr[arr.length-1-1]交換 //arr[2]和arr[arr.lentth-1-2] //... int temp = arr[i]; arr[i] = arr[arr.length-1-i]; arr[arr.length-1-i] = temp; } }
-
###05.12_Java語言基礎(陣列的操作4查表法)(掌握)
- A:案例演示
-
陣列查表法(根據鍵盤錄入索引,查詢對應星期)
public static char getWeek(int week) { char[] arr = {' ','一','二','三','四','五','六','日'}; //定義了一張星期表 return arr[week]; //通過索引獲取表中的元素 }
-
###05.13_Java語言基礎(陣列的操作5基本查詢)(掌握)
- A:案例演示
-
陣列元素查詢(查詢指定元素第一次在陣列中出現的索引)
public static int getIndex(int[] arr,int value) { for (int i = 0;i < arr.length ;i++ ) { //陣列的遍歷 if (arr[i] == value) { //如果陣列中的元素與查詢的元素匹配 return i; } } return -1; }
-
###05.14_Java語言基礎(二維陣列概述和格式1的講解)(瞭解)
- A:二維陣列概述
- B:二維陣列格式1
- int[][] arr = new int[3][2];
- C:二維陣列格式1的解釋
- D:注意事項
- a:以下格式也可以表示二維陣列
- 1:資料型別 陣列名[][] = new 資料型別[m][n];
- 2:資料型別[] 陣列名[] = new 資料型別[m][n];
- B:注意下面定義的區別
-
int x; int y; int x,y; int[] x; int[] y[]; int[] x,y[]; x是一維陣列,y是二維陣列
- a:以下格式也可以表示二維陣列
- E:案例演示
- 定義二維陣列,輸出二維陣列名稱,一維陣列名稱,一個元素
###05.15_Java語言基礎(二維陣列格式1的記憶體圖解)(瞭解)
- A:畫圖演示
- 畫圖講解上面的二維陣列名稱,一維陣列名稱,一個元素的值的問題
###05.16_Java語言基礎(二維陣列格式2的講解及其記憶體圖解)(瞭解)
- 畫圖講解上面的二維陣列名稱,一維陣列名稱,一個元素的值的問題
- A:二維陣列格式2
- int[][] arr = new int[3][];
- B:二維陣列格式2的解釋
- C:案例演示
- 講解格式,輸出資料,並畫記憶體圖
###05.17_Java語言基礎(二維陣列格式3的講解及其記憶體圖解)(瞭解)
- 講解格式,輸出資料,並畫記憶體圖
- A:二維陣列格式3
- int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
- B:二維陣列格式3的解釋
- C:案例演示
- 講解格式,輸出資料,並畫記憶體圖
###05.18_Java語言基礎(二維陣列練習1遍歷)(掌握)
- 講解格式,輸出資料,並畫記憶體圖
- A:案例演示
-
需求:二維陣列遍歷
-
外迴圈控制的是二維陣列的長度,其實就是一維陣列的個數。
-
內迴圈控制的是一維陣列的長度。
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; for (int i = 0;i < arr.length ;i++ ) { //獲取到每個二維陣列中的一維陣列 for (int j = 0;j < arr[i].length ;j++ ) { //獲取每個一維陣列中的元素 System.out.print(arr[i][j] + " "); } System.out.println(); }
-
###05.19_Java語言基礎(二維陣列練習2求和)(掌握)
- A:案例演示
-
需求:公司年銷售額求和 某公司按照季度和月份統計的資料如下:單位(萬元) 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}}; int sum = 0; //定義變數,記錄每次相加的結果 for (int i = 0;i < arr.length ;i++ ) { //獲取每一個一維陣列 for (int j = 0;j < arr[i].length ;j++ ) { //獲取每一個一維陣列中的元素 sum = sum + arr[i][j]; //累加 } } System.out.println(sum);
###05.20_Java語言基礎(思考題Java中的引數傳遞問題及圖解)(掌握)
- A:案例演示
-
看程式寫結果,並畫記憶體圖解釋 public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a:"+a+",b:"+b); change(a,b); System.out.println("a:"+a+",b:"+b); int[] arr = {1,2,3,4,5}; change(arr); System.out.println(arr[1]); } public static void change(int a,int b) { System.out.println("a:"+a+",b:"+b); a = b; b = a + b; System.out.println("a:"+a+",b:"+b); } public static void change(int[] arr) { for(int x=0; x<arr.length; x++) { if(arr[x]%2==0) { arr[x]*=2; } } }
總結:
基本資料型別的值傳遞,不改變實際引數的值,因為呼叫就會彈棧,形式引數也會隨之消失(區域性變數)
引用資料型別的值傳遞傳的是地址值,改變原值,因為呼叫後即使方法彈棧,
但是堆記憶體中的陣列物件還在,還可以通過地址進行訪問。
Java中是傳值還是傳址:
1,Java中既是傳值,也是傳址,資料型別傳的是值,引用型別傳的是地址值
2,java中只有傳值,因為地址值也是值(高斯林支援)
###05.21_day05總結
- 把今天的知識點總結一遍。