JavaSE 陣列:一維陣列&二維陣列

qq_43563187發表於2020-11-26

day05目錄:

​ 陣列
​ 一維陣列
​ 二維陣列

05.01_Java語言基礎(陣列概述和定義格式說明)(掌握)

A:為什麼要有陣列
	現在需要統計某公司員工的工資情況,例如計算平均工資、找到最高工資等。假設該公司有80名員工,
	用前面所學的知識,程式首先需要宣告80個變數來分別記住每位員工的工資,然後在進行操作,這樣做會顯得很麻煩。
	為了解決這種問題,Java就提供了陣列供我們使用
	結論:
		陣列是儲存多個變數(元素)的東西(容器)
		這多個變數的資料型別要一致	
B:陣列概念
	陣列是儲存同一種資料型別多個元素的集合。也可以看成是一個容器。
	陣列既可以儲存基本資料型別,也可以儲存引用資料型別(後面講解)。
C:陣列定義格式
	格式1: 資料型別[] 陣列名;
	格式2: 資料型別   陣列名[];
舉例:
	int[] a; 	定義了一個int型別的陣列a;
	int a[];	定義了一個int型別的a陣列;
	推薦使用第一種定義方式。

05.02_Java語言基礎(陣列的初始化動態初始化)(掌握)

A:什麼是陣列的初始化
	Java中的陣列必須先初始化,然後才能使用。
	所謂初始化:就是為陣列中的陣列元素分配記憶體空間,併為每個陣列元素賦值。
B:初始化的分類:
	a:動態初始化:	只指定長度,由系統給出初始化值
	b:靜態初始化:	給出初始化值,由系統決定長度	
	注意事項: 這兩種方式,只能使用一種,不能進行動靜結合	
C:動態初始化的格式:
	資料型別[] 陣列名 = new 資料型別[陣列長度];
	陣列長度其實就是陣列中元素的個數。
	舉例: int[] arr = new int[3];	定義了一個int型別的陣列arr,這個陣列可以存放3個int型別的值。
D:案例演示	
	輸出陣列名稱和陣列元素

05.03_Java語言基礎(Java中的記憶體分配以及棧和堆的區別)(理解)

Java虛擬機器在執行Java程式的過程中會把它管理的記憶體劃分成若干個不同的資料區域

A:棧: 存放的是區域性變數
	區域性變數:在方法定義中或者方法宣告上的變數都是區域性變數。
B:堆: 存放的是所有new出來的東西
	特點:
		a: 每一個new出來的東西都會為其分配一個地制值。
		b: 每一個變數都有一個預設的值
			byte,short,int,long  -- 0
			float,double 		       -- 0.0
			char 				      -- '\u0000'
			boolean 				-- false
			引用資料型別	 -- null		
		c: 使用完畢就變成了垃圾,等待垃圾回收器對其回收
C:方法區:(物件導向部分講解)  
D:本地方法區:(和系統相關) 
E:暫存器:(cpu使用)

05.04_Java語言基礎(陣列的記憶體圖解1一個陣列)(掌握)

A:定義一個陣列,輸出陣列名稱和陣列中的元素值,給陣列賦值,再次輸出陣列名稱和陣列中的元素值

05.05_Java語言基礎(陣列的記憶體圖解2二個陣列)(掌握)

A:定義兩個陣列,分別輸出陣列名稱和陣列中的元素值,分別給兩個陣列賦值,再次輸出陣列名稱和陣列中的元素值

05.06_Java語言基礎(陣列的記憶體圖解3三個引用2個陣列)(掌握)

A:	定義第一個陣列,定義完畢後,給陣列元素賦值。賦值完畢後,再輸出陣列名稱和元素。
	定義第二個陣列,定義完畢後,給陣列元素賦值。賦值完畢後,再輸出陣列名稱和元素。
	定義第三個陣列,把第一個陣列的地址值賦值給它。(注意型別一致),通過第三個陣列的名稱去把元素重新賦值。
	最後,再次輸出第一個陣列陣列名稱和元素。

05.07_Java語言基礎(陣列的初始化靜態初始化及記憶體圖)(掌握)

A:靜態初始化的格式:
	格式:資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,…};
		舉例: int[] arr = new int[]{1,2,3};
	簡化格式:
		資料型別[] 陣列名 = {元素1,元素2,…};
		舉例: int[] arr = {1,2,3};
B:畫圖演示
	a:定義一個陣列,輸出陣列名稱和陣列中的元素值

05.08_Java語言基礎(陣列操作的兩個常見小問題越界和空指標)(掌握)

A:案例演示
	a:ArrayIndexOutOfBoundsException:陣列索引越界異常
		原因:你訪問了不存在的索引。
	b:NullPointerException:空指標異常
		原因:陣列已經不在指向堆記憶體了。而你還用陣列名去訪問元素。

05.09_Java語言基礎(陣列的操作1遍歷)(掌握)

A:案例演示:    陣列遍歷:就是依次輸出陣列中的每一個元素。

05.10_Java語言基礎(陣列的操作2獲取最值)(掌握)

A:案例演示:    陣列獲取最值(獲取陣列中的最大值或者最小值)

05.11_Java語言基礎(陣列的操作3反轉)(掌握)

A:案例演示:    陣列元素反轉(就是把元素對調)

05.12_Java語言基礎(陣列的操作4查表法)(掌握)

A:案例演示:    陣列查表法(根據鍵盤錄入索引,查詢對應星期)

05.13_Java語言基礎(陣列的操作5基本查詢)(掌握)

A:案例演示:    陣列元素查詢(查詢指定元素第一次在陣列中出現的索引)

05.14_Java語言基礎(二維陣列概述和格式1的講解)(理解)

A:二維陣列概述
	我們學校的Java基礎班每個班有很多個學生,所以,可以用陣列來儲存,而我們又同時有很多個Java基礎班。
	這個也應該用一個陣列來儲存。如何來表示這樣的資料呢?Java就提供了二維陣列供我們使用
	由此可見:其實二維陣列其實就是每一個元素為一維陣列的陣列。
B:二維陣列格式1
	資料型別[][] 變數名 = new 資料型別[m][n];
	m表示這個二維陣列有多少個一維陣列 必須寫上
	n表示每一個一維陣列的元素個數 可選
	舉例:
		int[][] arr = new int[3][2];
		定義了一個二維陣列arr
		這個二維陣列有3個一維陣列,名稱是arr[0],arr[1],arr[2]
		每個一維陣列有2個元素,可以通過arr[m][n]來獲取
			表示獲取第m+1個一維陣列的第n+1個元素
C:注意事項
	A:以下格式也可以表示二維陣列
		a:資料型別 陣列名[][] = new 資料型別[m][n];
		b:資料型別[] 陣列名[] = new 資料型別[m][n];
		這兩種格式不推薦使用
	B:注意下面定義的區別
		int x,y;
		int[] x,y[];	
		
		區別是:
		 int[] x,y[];//定義了兩個陣列 一個是一維陣列x 一個是二維陣列y
		  x=new int[3];	
  			  y=new int[3][];
  			  
D:案例演示
	定義二維陣列,輸出二維陣列名稱,輸出每一個一維陣列名稱,輸出二維陣列的2個元素

05.15_Java語言基礎(二維陣列格式1的記憶體圖解)(理解)

對上邊的操作畫記憶體圖

05.16_Java語言基礎(二維陣列格式2的講解及其記憶體圖解)(理解)

A:二維陣列格式2
	資料型別[][] 變數名 = new 資料型別[m][];
		m表示這個二維陣列有多少個一維陣列
		這一次沒有直接給出一維陣列的元素個數,可以動態的給出。
	舉例:
		int[][] arr = new int[3][];
		arr[0] = new int[2];
		arr[1] = new int[3];
		arr[2] = new int[1];
B:案例演示
	定義一個二維陣列,輸出二維陣列的名稱和二維陣列的的每一個一維陣列,然後動態給二維陣列賦值一維陣列
	再次輸出二維陣列中的每一個一維陣列,給二維陣列中的元素賦值,輸出對應的元素值

05.17_Java語言基礎(二維陣列格式3的講解及其記憶體圖解)(理解)

A:二維陣列格式3
		資料型別[][] 變數名 = new 資料型別[][]{{元素…},{元素…},{元素…}...};
	簡化版:
		資料型別[][] 變數名 = {{元素…},{元素…},{元素…}};
	這個格式屬於靜態初始化:由我們指定具體的元素值,由系統給分配長度
		舉例: 
			int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
			int[][] arr = {{1,2,3},{5,6},{7}};
B:案例演示
	定義一個二維陣列,列印每一個二維陣列中的一維陣列,在列印每一個二維陣列中的元素

05.18_Java語言基礎(二維陣列練習1遍歷)(理解)

A:案例演示
	需求:二維陣列遍歷
	外迴圈控制的是二維陣列的長度,其實就是一維陣列的個數。
	內迴圈控制的是一維陣列的長度。

05.19_Java語言基礎(二維陣列練習2求和)(理解)

A:案例演示
	需求:公司年銷售額求和
	某公司按照季度和月份統計的資料如下:單位(萬元)
	第一季度:22,66,44
	第二季度:77,33,88
	第三季度:25,45,65
	第四季度:11,66,99
B:需求:列印楊輝三角形(行數可以鍵盤錄入)

		1
		1 1	
		1 2 1
		1 3 3 1
		1 4 6 4 1 
		1 5 10 10 5 1

分析:看這種影像的規律
	A:任何一行的第一列和最後一列都是1
	B:從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。

步驟:
	A:首先定義一個二維陣列。行數如果是n,我們把列數也先定義為n。
	  這個n的資料來自於鍵盤錄入。
	B:給這個二維陣列任何一行的第一列和最後一列賦值為1
	C:按照規律給其他元素賦值
		從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。
	D:遍歷這個二維陣列。

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;
			}
		}
	}

遞迴

A:遞迴概述: 方法定義中呼叫方法本身的現象
B:遞迴注意事項
	要有出口,否則就是死遞迴
	次數不能太多,否則就記憶體溢位
C:遞迴舉例:	我們學程式設計…

(遞迴解決問題的思想及圖解)(理解)

A:畫圖演示:遞迴解決問題的思想及圖解(5!)

(遞迴求階乘的程式碼實現及記憶體圖解)(理解)

A:案例演示
	需求:求5的階乘
	迴圈實現
	遞迴實現
B:畫圖演示:	遞迴實現求5的階乘的記憶體圖

(不死神兔問題)(理解)

A:案例演示:	需求:兔子問題(斐波那契數列)
	有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問第二十個月的兔子對數為多少?
	由此可見兔子物件的資料是:1 , 1 , 2 , 3 , 5 , 8 ...

05.21_day05重點總結

陣列----儲存一組相同資料型別的容器

陣列可以儲存基本資料型別,也可以儲存引用型別

對陣列必須初始化才能使用----動態初始化,

靜態初始化

方法區—位元組碼----類的資訊–物件導向

java中記憶體用完不需要釋放,虛擬機器會自動釋放。

過程

位元組碼載入進方法區

main入棧

引用在棧裡,new後堆中開闢空間,分配一個16進位制的地址值給堆記憶體,指向空間,然後值被覆蓋。

將堆中地址值棧彈出 JVM垃圾回收器回收堆中的空間

多個引用指向同一塊空間

區域性變數:定義在方法中,或方法宣告上的變數-----形參

調屬性不要括號,調方法要括號

引用資料型別:陣列、類、介面—需要new出來的東西,在堆記憶體進行記憶體的分配和資料的初始化

引用資料型別什麼時候null,陣列置空,引用指標斷開

陣列的靜態初始化—由我們為陣列元素賦值,由系統計算陣列長度–和動態陣列區分???

公式一個元素的索引=長度-1

靜態陣列簡寫

陣列的遍歷:

arr.length.fori-----可能需要修改

arr.length.forr------需要修改

運算元組時經常會遇到的異常:

陣列角標越界異常

空指標異常

引用型別都可以:用完之後,人為置空 —有利於垃圾回收器及早回收空間 arr=null

二位陣列:存放的資料是一位陣列

沒寫了二位陣列的第二個數字—arr[0]列印的是------null

寫了二位陣列的第二個數字—arr[0]列印的是------地址

寫了二位陣列的第二個數字—arr[0]【0】列印的是------二維 陣列中的一位陣列中的元素值

陣列是引用型別,預設值是Null

相關文章