目录
声明:本文整理于黑马程序员的Java教学视频,仅可作为资料参考学习使用,侵权请联系删除。
第一章 数组
一、数组的概念
1.1 数组的概念
数组是指存储数据长度固定的容器,其中多个数据的数据类型一致。
容器:是将多个数据存储到一起,每个数据称为该容器的元素。
1.2 数组的定义格式
1)指定数组固定长度定义数组【动态初始化】:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
[] : 表示数组。
数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
new:关键字,创建数组使用的关键字。
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
[长度]:数组的长度,表示数组容器中可以存储多少个元素。
注意:数组有定长特性,长度一旦指定,不可更改。
动态初始化时数组的默认值:
数组数据类型 | 初始化默认值 |
---|---|
整数类型 | 0 |
浮点类型 | 0.0 |
字符类型 | \u0000 |
布尔类型 | false |
引用类型 | null |
2)指定数组内容定义数组【静态初始化】:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
3)通过直接赋值定义数组【省略型静态初始化】:
数据类型[] 数组名 = {元素1,元素2,元素3...};
1.3 数组的特点
① 数组是一种引用数据类型。
② 数组中的多个数据,数据类型必须是一致的。
③ 数组的长度在程序运行期间不可改变。
二、数组的访问方法
2.1 索引的定义
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引 (index),可以通过数组的索引访问到数组中的元素。
数组名[索引];
2.2 数组的长度
数组具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。因此,数组的最大索引值为数组名.length-1 。
2.3 通过索引访问数组的元素
为数组中的元素赋值
数组名[索引] = 数值;
获取出数组中的元素
变量 = 数组名[索引];
第二章 内存图
一、Java中的内存划分
1)栈(Stack):存放的是方法中的局部变量。
方法一定在栈中运行
名称 | 含义 |
---|---|
局部变量 | 方法的参数,或者是方法的大括号中的变量 |
作用域 | 一旦超出作用域,就从栈内存中消失 |
2)堆(Heap):通过”new“生成的东西,都存放在堆中。
堆内存里面的东西都具有一个十六进制的地址值
堆内存中的数据的数据类型 | 默认值 |
---|---|
整数 | 0 |
浮点数 | 0.0 |
字符 | \u0000 |
布尔 | false |
引用类型 | nul |
3)方法区(Method Area):存储.class文件信息,包含方法的信息。
4)本地方法栈(Native Method Area):与操作系统有关。
5)寄存器(pc Reister):与中央处理器(CPU)有关。
二、数组的内存图
2.1 一个数组的内存图
public class MyOneArray {
public static void main(String[] args) {
int[] myonearray = new int[3];
System.out.println(myonearray);
myonearray[1] = 1;
myonearray[2] = 2;
System.out.println(myonearray);//数组地址值
System.out.println(myonearray[0]);//默认值0
System.out.println(myonearray[1]);//1
System.out.println(myonearray[2]);//2
}
}
2.2 两个数组内存图
public class MyTwoArray {
public static void main(String[] args) {
int[] arr1 = new int[3];
arr1[1] = 1;
arr1[2] = 2;
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
int[] arr2 = new int[3];
arr2[1] = 3;
arr2[2] = 4;
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
}
2.3 一个数组引用另一个数组的内存图
public class MySameArray {
public static void main(String[] args) {
int[] arrone = new int[3];
arrone[1] = 10;
arrone[2] = 20;
System.out.println(arrone);
System.out.println(arrone[0]);
System.out.println(arrone[1]);
System.out.println(arrone[2]);
int[] arrtwo = arrone;
arrtwo[1] = 1;
arrtwo[2] = 2;
System.out.println(arrtwo);
System.out.println(arrtwo[0]);
System.out.println(arrtwo[1]);
System.out.println(arrtwo[2]);
}
}
三、数组常见的操作类型
3.1 数组空指针索引异常
就是指数组索引值超出数组既定范围,构成异常。
public class MyErrorArray {
public static void main(String[] args) {
int[] arr = new int[3];
for (int i = 0; i < 3; i++) {
arr[i] = i;
}
System.out.println(arr[0]);//0
System.out.println(arr[1]);//1
System.out.println(arr[2]);//2
System.out.println(arr[3]);//Error错误写法,索引越界
}
}
程序不能访问数组中不存在的索引,程序运行后,会抛出 ArrayIndexOutOfBoundsException 数组索引越界异常。
3.2 空指针异常
在数组初始化时对其赋值null,没用使用new创建。
public class MyNullArray {
public static void main(String[] args) {
int[] arr = null;
System.out.println(arr[0]);
}
}
变量arr没有保存数组的内存地址,所以不允许再操作数组了,因此程序运行的时候会抛出 NullPointerException 空指针异常。
3.3 获取数组的长度
通过数组名.length方法获取数组的长度,数组一旦创建,长度不变。
public class MyArrayLength {
public static void main(String[] args) {
int[] arr = new int[]{1,54,1,6,662,6154,1665,1564,56456,4648,2,3,5,5,23,2,5,3,5,6,};
System.out.println(arr.length);
}
}
3.4 数组的遍历输出
遍历数组的定义
对数组中的每一个元素进行逐一处理,默认处理方式为打印输出。
public class MyArray {
public static void main(String[] args) {
int[] arr = new int[20];
for (int i = 0; i < 20; i++) {
arr[i] = i+2;
}
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i < arr.length-1) {
System.out.print(arr[i] + ",");
} else {
System.out.println(arr[arr.length-1] + "]");
}
}
}
}
3.5 求出数组中的最值
1)求最大值
public class MyArrayMax {
public static void main(String[] args) {
int[] arr = {1,52,3,564,12,46,5};
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println("最大值为:" + max);
}
}
2)求最小值
public class MyArrayMax {
public static void main(String[] args) {
int[] arr = {1,52,3,564,12,46,5};
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < max) {
min = arr[i];
}
}
System.out.println("最小值为:" + min);
}
}
3.6 对数组元素进行反转
选定中值,对数组元素进行位置对称交换。
public class MyReverseArray {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println("\n_____");
for (int min = 0,max = arr.length-1;min<max;min++,max--) {
int d = arr[min];
arr[min] = arr[max];
arr[max] = d;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}
3.7 数组作为参数使用
public class MyParmArray {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
printTheArray(arr);
}
public static void printTheArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i < arr.length-1) {
System.out.print(arr[i] + ",");
} else {
System.out.println(arr[arr.length-1] + "]");
}
}
}
}