摘要:空指針異常原因數(shù)組已經不在指向堆內存了。當訪問數(shù)組不存在的索引時,就會出現(xiàn)數(shù)組索引越界異常數(shù)組的操作遍歷掌握案例演示數(shù)組遍歷就是依次輸出數(shù)組中的每一個元素。內循環(huán)控制的是一維數(shù)組的長度。
1.數(shù)組概述和定義格式說明
A:為什么要有數(shù)組(容器): 為了存儲同種數(shù)據類型的多個值
B:數(shù)組概念: 數(shù)組是存儲同一種數(shù)據類型多個元素的集合。也可以看成是一個容器;數(shù)組既可以存儲基本數(shù)據類型,也可以存儲引用數(shù)據類型。
C:數(shù)組定義格式:數(shù)據類型[] 數(shù)組名 = new 數(shù)據類型[數(shù)組的長度];
public class Demo_Array { //數(shù)組array
public static void main(String[] args) { int x = 10; x = 20; System.out.println(x); // 數(shù)據類型[] 數(shù)組名 = new 數(shù)據類型[數(shù)組的長度]; int[] arr = new int[5]; //動態(tài)的定義數(shù)組,長度為五;在內存中開辟5塊連續(xù)的空間 /* 左邊: int 代表數(shù)組的數(shù)據類型, [] 代表有幾個中括號,就代表幾維數(shù)組; arr 數(shù)組名,只要是合法的標識符。 右邊: new 代表的是創(chuàng)建新的實體或對象, int 數(shù)組的數(shù)據類型 [] 代表有幾個中括號,就代表幾維數(shù)組; 5 代表的是數(shù)組的長度 */ System.out.println(arr); }
}
2.數(shù)組的初始化動態(tài)初始化(掌握)
A:什么是數(shù)組的初始化
就是為數(shù)組開辟連續(xù)的內存空間,并為每個數(shù)組元素賦予值
B:如何對數(shù)組進行初始化
a:動態(tài)初始化 只指定長度,由系統(tǒng)給出初始化值
基本數(shù)據類型的默認初始化值:
byte short int long : 0
float double : 0.0
boolean : false
char :"u0000" unicode :char在內存中占兩個字節(jié),即16個二進制位; u0000,每一個0代表的是16進制的0:那么4個0就代表16個二進制位
引用數(shù)據類型的默認初始化值:null
int[] arr = new int[5];
b:靜態(tài)初始化 給出初始化值,根據值的個數(shù)由系統(tǒng)決定長度
C:動態(tài)初始化的格式:
數(shù)據類型[] 數(shù)組名 = new 數(shù)據類型[數(shù)組長度];
D:案例演示
輸出數(shù)組名稱和數(shù)組元素
[I@61064425 [ 代表的是數(shù)組,有幾個‘[’就代表幾維數(shù)組 I 代表的是數(shù)據類型 int @ 是固定的 1064425 代表的是十六進制的地址值 class Demo_Array { //數(shù)組array public static void main(String[] args) { // a:動態(tài)初始化 只指定長度,由系統(tǒng)給出初始化值 int [] arr = new int[5]; //動態(tài)的定義數(shù)組:5代表的是在計算機內存中開辟的連續(xù)的五塊空間 System.out.println(arr[0]); arr[0] = 10; //顯式的賦值 System.out.println(arr[0]); System.out.println(arr); //返回結果[I@61064425 } }3.Java中的內存分配以及棧和堆的區(qū)別
A:棧(掌握):存儲局部變量, 定義在方法聲明上或者方法中的變量;
B:堆(掌握):存儲new出來的數(shù)組或對象
C:方法區(qū):面向對象部分講解
D:本地方法區(qū):和系統(tǒng)相關
E:寄存器:給CPU使用
4.數(shù)組的內存圖解(掌握)一個數(shù)組
二個不同的數(shù)組
三個引用,有兩個數(shù)組的引用指向同一個地址
class Demo_Array{ public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); arr[0] = 10; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr); } } class Demo_Array{ public static void main(String[] args) { int[] arr1 = new int[3]; int[] arr2 = new int[5]; int[] arr3 = arr2; System.out.println(arr1); System.out.println(arr2); System.out.println(arr3); arr1[0] = 10; arr1[1] = 20; arr2[1] = 30; arr3[1] = 40; arr3[2] = 50; System.out.println(arr1[0]); System.out.println(arr1[1]); System.out.println(arr1[2]); System.out.println("----------------"); System.out.println(arr2[0]); System.out.println(arr2[1]); System.out.println(arr2[2]); System.out.println(arr2[3]); System.out.println(arr2[4]); System.out.println("----------------"); System.out.println(arr3[0]); System.out.println(arr3[1]); System.out.println(arr3[2]); System.out.println(arr3[3]); System.out.println(arr3[4]); } } 方法是棧內存的:先進后出 棧幀 壓棧 彈棧5.數(shù)組的初始化靜態(tài)初始化及內存圖(掌握)
靜態(tài)初始化 給出初始化值,根據值的個數(shù)由系統(tǒng)決定長度
A:靜態(tài)初始化的格式:
格式:數(shù)據類型[] 數(shù)組名 = new 數(shù)據類型[]{元素1,元素2,…};
簡化格式:
數(shù)據類型[] 數(shù)組名 = {元素1,元素2,…};
B:案例演示
對數(shù)組的解釋
輸出數(shù)組名稱和數(shù)組元素
C:畫圖演示
一個數(shù)組
class Demo_Array{ public static void main(String[] args) { //int [] arr = new int[]{11,22,33,44,55}; //靜態(tài)創(chuàng)建數(shù)組 int [] arr2 = {11,22,33,44,55}; //int [] arr; //arr = new int[]{11,22,33,44,55}; //int [] arr2; //簡寫格式:必須是聲明與賦值寫在同一行 //arr2 = {11,22,33,44,55}; System.out.println(arr2); System.out.println(arr2[0]); } }6.數(shù)組操作的兩個常見小問題越界和空指針(掌握)
A:案例演示
a:ArrayIndexOutOfBoundsException:數(shù)組索引越界異常
原因:你訪問了不存在的索引。
b:NullPointerException:空指針異常
原因:數(shù)組已經不在指向堆內存了。而你還用數(shù)組名去訪問元素。
int[] arr = {1,2,3};
arr = null;
System.out.println(arr[0]);
class Demo_Array{ public static void main(String[] args) { int [] arr = {11,22,33,44,55}; //System.out.println(arr[6]); //當訪問數(shù)組不存在的索引時,就會出現(xiàn)數(shù)組索引越界異常:arrayIndexOutOfBoundsException arr = null; System.out.println(arr[1]); } }7.數(shù)組的操作1遍歷(掌握)
A:案例演示
數(shù)組遍歷:就是依次輸出數(shù)組中的每一個元素。
數(shù)組的屬性:arr.length數(shù)組的長度
數(shù)組的最大索引:arr.length - 1;
public static void print(int[] arr) { for (int i = 0;i < arr.length ;i++ ) { System.out.print(arr[i] + " "); } } class Demo_Array{ public static void main(String[] args) { int [] arr = {11,22,33,44,55,66,77}; //0x0011 /* 遍歷數(shù)組 1.明確返回值類型 void 2.明確參數(shù)列表 int[] arr */ print(arr); //arr = 0x0011 } public static void print(int[] a) { //a = 0x0011 for (int i = 0 ;i < 7 ; i ++) { System.out.println(a[i]); } } }8.數(shù)組的操作2獲取最值(掌握)
A:案例演示
數(shù)組獲取最值(獲取數(shù)組中的最大值最小值)
class Demo_Array{ public static void main(String[] args) { int [] arr = {44,22,33,11,55,66,22}; //0x0011 int length = arr.length; System.out.println(length); //println(arr.length); /* 獲取數(shù)組中的最大值 1.返回值類型 int 2.明確參數(shù)列表 int[] arr */ int max1 = getMax(arr); System.out.println("max1 = " + max1); } public static int getMax(int [] arr) { int max = arr[0]; //定義變量max :用來記錄最大值得 for (int i = 1;i < arr.length ; i ++ ) { //遍歷數(shù)組,獲取從1索引到最大索引 if (max < arr[i]) { //如果數(shù)組中的其他元素比max大 max = arr[i]; //就將該元素賦值給max } } return max; } }9.數(shù)組的操作3反轉(掌握)
A:案例演示
數(shù)組元素反轉(就是把元素對調)
class Demo_Array{ public static void main(String[] args) { int [] arr = {11,22,33,44,55,66,77}; reverseArray(arr); print(arr); } /* 數(shù)組的元素反轉 1.返回值類型 void 2.參數(shù)列表 int[] arr */ public static void reverseArray(int [] arr) { for (int i = 0;i < arr.length / 2 ; i ++ ) { /* arr[0] 與 arr[arr.length - 1 - 1]進行對調 arr[1] 與 arr[arr.length - 1 - 1]進 行對調 arr[1] 與 arr[arr.length - 1 - 2]進行對調 ... arr[i] 與 arr[arr.length - 1 - i]進行對調 */ int temp; temp = arr[i]; arr[i] = arr[arr.length -1-i]; arr[arr.length-1-i] = temp; } } /* 遍歷數(shù)組 1.返回值類型 void 2.參數(shù)列表 int[] arr */ public static void print(int [] arr) { for (int i = 0 ;i < arr.length ; i ++ ) { System.out.print(arr[i] + " "); } } }10.數(shù)組的操作4查表法(掌握)
A:案例演示
數(shù)組查表法(根據鍵盤錄入索引,查找對應星期)
import java.util.Scanner; class Demo_Array{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入一個星期,范圍是1-7:"); int index = sc.nextInt(); System.out.println("星期" + getWeek(index)); } /* 根據鍵盤錄入索引,查找對應星期 1.返回值類型 char 2.參數(shù)列表 int week */ public static char getWeek(int week) { char[] arr = {" ","一","二","三","四","五","六","日"};//定義了一張星期表 return arr[week];//通過索引獲取表中的元素 } }11.數(shù)組的操作5基本查找(掌握)
A:案例演示
數(shù)組元素查找(查找指定元素第一次在數(shù)組中出現(xiàn)的索引)
class Noname1{ public static void main(String[] args) { int[] arr = {11,22,33,44,55,66}; int value = getIndex(arr,66); System.out.println(value); } /* 數(shù)組元素查找(查找指定元素第一次在數(shù)組中出現(xiàn)的索引) 1.返回值類型 int 2.參數(shù)列表 int [] arr,int value */ public static int getIndex(int[] arr,int value) { for (int i = 0; i < arr.length ;i ++ ) {//數(shù)組的遍歷 if (arr[i] == value) { return i;//如果數(shù)組中的元素與查找的元素匹配 } } return -1; //if,for,while都有可能不滿足的時候,必須注意 } }12.二維數(shù)組概述和格式1的講解(了解)
A:二維數(shù)組概述
B:二維數(shù)組格式1
int[][] arr = new int3;
C:二維數(shù)組格式1的解釋
D:注意事項
a:以下格式也可以表示二維數(shù)組
1:數(shù)據類型 數(shù)組名[][] = new 數(shù)據類型m;
2:數(shù)據類型[] 數(shù)組名[] = new 數(shù)據類型m;
B:注意下面定義的區(qū)別
int x; int y; int x,y; int[] x; int[] y[]; int[] x,y[]; x是一維數(shù)組,y是二維數(shù)組
E:案例演示
定義二維數(shù)組,輸出二維數(shù)組名稱,一維數(shù)組名稱,一個元素
13.二維數(shù)組格式1的內存圖解(了解)
A:畫圖演示
畫圖講解上面的二維數(shù)組名稱,一維數(shù)組名稱,一個元素的
class Demo_Array{ public static void main(String[] args) { int[][] arr = new int[3][2]; System.out.println(arr); //二維數(shù)組的地址值 System.out.println(arr[0]); //打印二維數(shù)組中的第一個一維數(shù)組的地址值 System.out.println(arr[0][0]); //打印二維數(shù)組中的第一個一維數(shù)組的第一個元素 } }14.二維數(shù)組格式2的講解及其內存圖解(了解)
A:二維數(shù)組格式2
int[][] arr = new int[3][];
B:二維數(shù)組格式2的解釋
C:案例演示
講解格式,輸出數(shù)據,并畫內存圖
//這是一個二維數(shù)組;這個二維中有三個一維數(shù)組;三個一維數(shù)組都沒有被初始化.
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
arr[0] = new int[3]; //第一個一維數(shù)組中可以存在3個int值
arr[1] = new int[5]; //第一個一維數(shù)組中可以存在5個int值
System.out.println("--------------");
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
class Demo_Array{ public static void main(String[] args) { //這是一個二維數(shù)組,二維數(shù)組中有三個一位數(shù)組,每一個一維數(shù)組并沒有進行初始化定義 int[][] arr = new int[3][]; arr[0] = new int[3]; //將二維數(shù)組中的第一個一維數(shù)組進行動態(tài)初始化;3代表一維數(shù)組里面可以存儲三個元素 arr[1] = new int[5]; System.out.println(arr); System.out.println(arr[1]); System.out.println(arr[0]); System.out.println(arr[2]); System.out.println(arr[0][0]); System.out.println(arr[0][1]); System.out.println(arr[0][2]); System.out.println("--------------------"); System.out.println(arr[0][0]); System.out.println(arr[1][1]); System.out.println(arr[1][2]); System.out.println(arr[1][3]); System.out.println(arr[1][4]); System.out.println("--------------------"); System.out.println(arr[2][0]); } }15.二維數(shù)組格式3的講解及其內存圖解(了解)
A:二維數(shù)組格式3
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
B:二維數(shù)組格式3的解釋
C:案例演示
講解格式,輸出數(shù)據,并畫內存圖
//這是一個二維數(shù)組,二維數(shù)組中每一個大括號都代表著一維數(shù)組
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
System.out.println(arr); //[[I@15db9742 二維數(shù)組地址值
System.out.println(arr[0]); //[I@6d06d69c 一維數(shù)組地址值
System.out.println(arr0); //1 一維數(shù)組中的元素值
class Demo_Array{ public static void main(String[] args) { //這是一個二維數(shù)組,二維數(shù)組有三個一維數(shù)組,第一個一維數(shù)組存儲三個元素,后同; int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; System.out.println(arr); //二維數(shù)組的地址值; System.out.println(arr[0]); //二維數(shù)組中的第一個一維數(shù)組的地址值; System.out.println(arr[0][2]); //輸入的是二維數(shù)組中的第一個數(shù)組中的第一個元素值; } }16.二維數(shù)組練習1遍歷(掌握)
A:案例演示
需求:二維數(shù)組遍歷
外循環(huán)控制的是二維數(shù)組的長度,其實就是一維數(shù)組的個數(shù)。
內循環(huán)控制的是一維數(shù)組的長度。
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; for (int i = 0;i < arr.length ;i++ ) { //獲取到每個二維數(shù)組中的一維數(shù)組 for (int j = 0;j < arr[i].length ;j++ ) { //獲取每個一維數(shù)組中的元素 System.out.print(arr[i][j] + " "); } System.out.println(); } class Demo_Array{ public static void main(String[] args) { int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; for (int i = 0;i < arr.length ;i ++ ) { //遍歷二維數(shù)組,得到每一個一維數(shù)組 for (int j = 0;j < arr[i].length ;j ++ ) { System.out.print(arr[i][j] + " "); } System.out.println(); } } }17.二維數(shù)組練習2求和(掌握)
A:案例演示
需求:公司年銷售額求和
某公司按照季度和月份統(tǒng)計的數(shù)據如下:單位(萬元)
第一季度: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++ ) { //獲取每一個一維數(shù)組 for (int j = 0;j < arr[i].length ;j++ ) { //獲取每一個一維數(shù)組中的元素 sum = sum + arr[i][j]; //累加 } } System.out.println(sum);
class Demo_Array{ public static void main(String[] args) { int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}}; int sum = 0; //聲明一個變量sum,用來累加每一個元素 for (int i = 0;i < arr.length ;i ++ ) { for (int j = 0;j < arr[i].length ; j ++ ) { sum = sum + arr[i][j]; } } System.out.print(sum); } }18.思考題Java中的參數(shù)傳遞問題及圖解(掌握)
A:案例演示(先前學的都是基本數(shù)據類型,那么數(shù)組是引用數(shù)據類型,那就看下基本數(shù)據類型和引用數(shù)據類型的參數(shù)傳遞問題~)
看程序寫結果,并畫內存圖解釋
基本數(shù)據類型的值傳遞
class Demo_Array{ /* 基本數(shù)據類型的值傳遞,不改變原值,因為方法調用后就會彈棧,而局部變量隨之消失 */ public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a:"+a+",b:"+b); //a = 10, b = 20 ; change(a,b); System.out.println("a:"+a+",b:"+b); //a = 10, b = 20 ; 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); } } class Demo_Array{ public static void main(String[] args) { int[] arr = {1,2,3,4,5}; change(arr); System.out.println(arr[1]); } public static void change(int[] arr) { for(int x=0; x基本數(shù)據類型的值傳遞,不改變原值,因為方法調用后就會彈棧,而局部變量隨之消失
引用數(shù)據類型的值傳遞,改變原值,因為即使方法調用后彈棧,但是堆內存中的數(shù)組對象還在,可以通過地址引用繼續(xù)訪問。
java中只有傳值,因為地址值也是只,支持者是java之父高思林。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76922.html
摘要:我的是忙碌的一年,從年初備戰(zhàn)實習春招,年三十都在死磕源碼,三月份經歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來的學習計劃,將我的短期目標更新成拿下阿里轉正。 我的2017是忙碌的一年,從年初備戰(zhàn)實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...
摘要:前端日報精選漫談函數(shù)式編程一十年蹤跡的博客前端每周清單的優(yōu)勢與劣勢有望超越在嵌入式及物聯(lián)網的應用現(xiàn)狀進階系列高階組件詳解一前端之路譯如何充分利用控制臺掘金程序猿升級攻略眾成翻譯中文譯如何充分利用控制臺掘金前端從強制開啟壓縮探 2017-06-27 前端日報 精選 漫談 JS 函數(shù)式編程(一) - 十年蹤跡的博客前端每周清單: Vue的優(yōu)勢與劣勢;Node.js有望超越Java;JS在嵌...
摘要:業(yè)界動態(tài)成為版本,當前發(fā)布版本為。前一階段主要聚焦于減少操作。技術縱橫重磅消息要支持開發(fā)和開發(fā)了主題演講當中提出的第一項重要公告,正是候選發(fā)行版簡稱的公布。 業(yè)界動態(tài) NEWS: Node.js 8 Moves into Long-Term Support and Node.js 9 Becomes the New Current Release Line Node 8成為LTS版本,...
摘要:什么是是配置管理中心,將配置統(tǒng)一管理提供標準的配置格式及編輯方式。如上圖支持任何應用,任何語言的配置管理,,,等,同時采用語法作用配置文件格式,支持數(shù)據類型及結構化配置。前提創(chuàng)建數(shù)據庫配置數(shù)據庫連接將文件與文件放置在同一目錄中。 什么是配置? 服務運行時能夠通過外部動態(tài)修改的參數(shù)既是配置。在運行時動態(tài)變更服務的行為,避免業(yè)務發(fā)生變更需要修改代碼或重啟服務等等。 什么是 duic? du...
閱讀 1317·2021-10-27 14:14
閱讀 3574·2021-09-29 09:34
閱讀 2477·2019-08-30 15:44
閱讀 1715·2019-08-29 17:13
閱讀 2569·2019-08-29 13:07
閱讀 867·2019-08-26 18:26
閱讀 3342·2019-08-26 13:44
閱讀 3210·2019-08-26 13:37