JavaSE学习笔记Day04

JavaSEDay04 总结笔记 01-数组介绍

  • 介绍 : 数组就是一种容器, 可以存储同种数据类型的多个值
int[] arr = {10,20,'a'}; System.out.println(arr[2]); // 97double arr = {10,20,30}; System.out.println(arr[0]); // 10.0-----------------------------------------------建议: 数组中存储同种数据类型

  • 问题 : 什么时候使用数组呢 ?
    • 要操作的数据有多个, 多个数据属于同一组数据, 就可以考虑使用数组容器
02-数组的定义格式
1. 数据类型[] 数组名; int[] arr; 2. 数据类型 数组名[]; double arr[];

  • 注意: 这种定义格式, 定义的仅仅是数组类型的变量, 容器还没有在内存中开辟空间
03-数组的静态初始化
  • 初始化 : 在内存中, 为数组容器开辟空间, 并将数据存入空间的过程.
  • 静态初始化 :
1. 完整格式: 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3...}; int[] arr = new int[3]{11,22,33}; 2. 简化格式: 数据类型[] 数组名 = {元素1, 元素2, 元素3...}; int[] arr = {11,22,33}; 注意: 打印数组名, 看到数组的十六进制内存地址[I@233ac4@ : 分隔符 [ : 当前空间是一个数组类型, 几个中括号, 就是几维数组. I : 容器的类型 233ac4 : 十六进制地址

04-数组的元素访问
  • 格式 : 数组名[索引];
  • 索引 | 下标 | 角标 : 数组中, 空间所对应的编号, 编号从0开始, 逐个+1进行增长.
int[] arr = {11,22,33,44,55}; System.out.pritnln(arr[0]); // 打印int result = arr[1] + 100; // 计算if(arr[2] % 2 == 0){// 判断}arr[3] = 66; // 修改for(int i = 1; i <= arr[4]; i++){// 循环 System.out.println("itheima"); }

05-数组的遍历操作
  • 介绍 : 将数组中每一个元素取出来
  • 遍历的使用场景 : 如果要实现的需求, 要对数组中[每一个]元素进行操作, 就需要遍历数组
for(int i = 0; i < arr.length; i++){ // i : 索引 // arr[i] : 元素 }数组名.length : 动态获取到数组的长度 (元素的个数)

06-数组的动态初始化
  • 介绍 : 在初始化数组的时候, 只需要手动指定长度, 系统就会分配默认值
  • 格式 : 数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3]; System.out.println(arr[0]); // 0

  • 默认值的分类 :
整数: 0 小数: 0.0 布尔: false 字符: '\u0000'---> Unicode字符 ----> 常见的体现空白字符 引用数据类型 : null--------------------------引用数据类型: 数组, 类, 接口null(空值) : 只能赋值给引用数据类型

  • 两种初始化的区别 :
    • 静态初始化 : 手动指定元素, 系统会根据元素的个数, 自动计算长度
    • 动态初始化 : 手动指定长度, 系统会分配默认值
  • 两种初始化的使用场景 :
    • 静态初始化 : 如果要操作的数据, 需求中已经明确给出
    需求: 已知班级学生成绩为 100 20 100 30 100 int[] arr = {100,20,100,30,100};

    • 动态初始化 : 只知道要存几个数, 但是具体是啥不清楚
    需求: 键盘录入5个整数, 求最大值 需求: 产生10个1~100之间随机数, 求最小值

  • 示例代码:
    import java.util.Random; public class ArrayTest7 { /* 需求: 产生10个1~100之间的随机数, 求最小值 */ public static void main(String[] args) { Random r = new Random(); // 动态初始化长度为10的数组容器 int[] arr = new int[10]; // 使用随机数填充数组 System.out.println("产生的随机数为:"); for (int i = 0; i < arr.length; i++) { arr[i] = r.nextInt(100) + 1; System.out.println(arr[i]); }// 求最小值 int min = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i] < min) { min = arr[i]; } }System.out.println("最小值为:" + min); } }

07-数组的内存图
  • 方法区 : 字节码文件 (.class) 加载时所进入的内存
  • 栈 : 方法运行的时候, 进入的内存
  • 堆 : new 出来的内容, 都会进入堆内存, 通常会开辟空间产生地址
以下内存, 不需要关注
  • 本地方法栈 :
  • 寄存器 :
  • 一维数组内存图:
    JavaSE学习笔记Day04
    文章图片
08-数组常见问题
  • ArrayIndexOufOfBoundsException : 数组索引越界异常
    • 原因 : 访问了不存在的索引
  • NullPointerException : 空指针异常
    • 原因 : 当引用数据类型变量, 记录到null之后, 代表跟堆内存的连接就被切断了
    • 这时候还想访问堆内存数据, 就会出现空指针异常.
  • 目标 : 今后看到这两个错误, 能够根据错误提示, 找到代码出错的位置, 并解决代码错误
09-二维数组介绍
  • 介绍 : 二维数组也是一种容器, 容器中存储的都是一维数组
    • 理解 : 数组的嵌套
  • 二维数组使用场景 :
    • 发现要操作的数据, 有多组
    • 这多组数据, 又是一个整体, 建议使用二维数组进行维护
10-二维数组静态初始化
  • 静态初始化格式 :
数据类型[][] 数组名 = new 数据类型[][]{ {一维数组1}, {一维数组2} }; 数据类型[][] 数组名 = { {一维数组1}, {一维数组2} }; ---------------------------------------int[][] arr = { {11,22,33}, {44,55,66} };

  • 二维数组的元素访问 :
数组名[m索引][n索引]; m索引 : 要访问哪一个一维数组 n索引 : 要访问一维数组的哪一个元素System.out.println(arr[1][0]); // 44

11-二维数组遍历
  • 【JavaSE学习笔记Day04】思路 :
    • 遍历二维数组, 获取到每一个一维数组
    • 继续遍历一维数组, 获取具体的元素
  • 代码 :
for(int i = 0; i < arr.length; i++){ // arr[i] : 每一个一维数组 for(int j = 0; j < arr[i].length; j++){ System.out.println(arr[i][j]); } }

12-二维数组动态初始化
  • 格式 :
数据类型[][] 数组名 = new 数据类型[m][n]; m : 可以存储多少个一维数组 n : 每一个一维数组, 可以存储多少个元素int[][] arr = new int[3][1]; 二维数组可以存储3个一维数组, 每一个一维数组可以存储1个元素. 示例代码: public class ArrayDemo3 { public static void main(String[] args) {int[][] arr = new int[2][3]; arr[0][3] = 11; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.println(arr[i][j]); } }} }

13-二维数组内存图
  • 二维数组:
    JavaSE学习笔记Day04
    文章图片

    推荐阅读