Demo04-数组、Debug
1.数组
1.1数组定义方式
1.静态初始化数组
- 完整格式:数据类型[] 数组名 = new 数据类型[] {元素1,元素2,元素3};
- 简化格式:数据类型[] 数组名 = {元素1,元素2,元素3};
- “数据类型[] 数组名"也可以写成"数据类型 数组名[]”
- 什么类型的数组存放什么类型的数据,否则会报错
- 数组一旦定义出来,程序执行的过程中长度和类型就固定了
数组变量名中存储的是数组在内存中的地址,数组是引用类型
double[] scores = {99.5, 88.0, 75.5};
System.out.println(scores);
输出结果是[D@1540e19d,[代表指向的是数组,D代表存储的数据是double类型
2.动态初始化数组
数据类型[] 数组名 = new 数据类型[长度];
数组内没有初始化的数据访问时为默认值
元素默认值规则:
数据类型 | 明细 | 默认值 |
---|---|---|
基本类型 | byte、short、char、int、long float、double boolean | 0 0.0 false |
引用类型 | 类、接口、数组、String | null |
double[] scores = new double[3]; // [0.0, 0.0, 0.0]
scores[0] = 99.5;
System.out.println(scores[0]);//输出99.5
System.out.println(scores[2]);//输出0.0
String[] names = new String[90];
names[0] = "迪丽热巴";
System.out.println(names[0]);//输出迪丽热巴
System.out.println(names[1]);//String是引用类型,默认值为null,所以这里输出null
注意字符数组的元素默认值是0
char[] chars = new char[100];
chars[0] = 97;
System.out.println(chars[0]);//输出a
System.out.println(chars[1]);//输出乱码
System.out.println((int)chars[1]);//输出0
第二个输出乱码是因为这是一个字符数组,存放的数据是字符类型,所以输出时会输出一个0对应的字符(0对应的字符是不可打印字符,所以乱码,可打印字符32~127),需要强制类型转换才能输出0
1.2数组内存图
1.java内存分配,数组内存图
java内存分配介绍:
- 栈:方法运行时所进入的内存,变量也是在这里
- 堆:new出来的东西会在这块内存中开辟空间并产生地址
- 方法区:字节码文件加载时进入的内存
- 本地方法栈
- 寄存器
- 编译后的class文件加载到方法区
- 将main方法提取到栈内存中运行
- 读取int a = 10;时先读取int a立马在栈内存中开辟一块空间a用来存放整数,然后读取=10,将10这个整数放到刚刚开辟的空间中
- 读取int [] arr = new int[]{11, 22, 33};时先读取int [] arr立马在栈内存中开辟一块空间arr用来后续存放整数类型数组的地址,然后读取= new int[]{11, 22, 33},在堆内存中开辟一块空间用来存放整数类型数组的数据,并将这块空间的地址赋值给arr
2.两个变量指向同一个数组
public class Test8 {
public static void main(String[] args) {
int[] arr1 = {11,22,33};
//把数组arr1变量赋值给int类型的数组变量arr2
int[] arr2 = arr1;
//输出结果一样
System.out.println(arr1);
System.out.println(arr2);
}
}
1.3数组注意事项
1.如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)
int[] arr = {};
System.out.println(arr);//仍会输出堆内存中存放数组的地址
System.out.println(arr);//数组索引越界异常
2.如果数组变量中没有存储数组的地址,而是null,那么在访问数组信息时就会出现NullPointException(空指针异常)
int[] arr = new int[]{11,22,33};
arr = null;
System.out.println(arr);//输出null
System.out.println(arr.length);//出现NullPointException异常
2.Debug工具
Debug时IDEA自带的断点调试(排错)工具,可以控制代码从断点开始一行一行的执行,然后详细观察程序执行的情况
使用步骤:
- 在需要控制的代码行左侧点击一下,形成断点
- 选择使用Debug方式启动程序,启动后程序会在断点暂停
- 控制代码一行一行的往下执行
假如打了断点然后Debug,此时不想再继续Debug了可以点Resume Program(F9)直接运行完该程序
假如打了断点1然后Debug,此时想直接跳到下一个断点,那么可以再打一个断点2,然后点Resume Program(F9)直接将程序运行至下一个断点