乐趣区

关于java:JavaSE学习笔记Day04

JavaSEDay04 总结笔记

01- 数组介绍

  • 介绍 : 数组就是一种容器, 能够存储同种数据类型的多个值
int[] arr = {10,20,'a'};
System.out.println(arr[2]);        // 97

double 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 进去的内容, 都会进入堆内存, 通常会开拓空间产生地址

以下内存, 不须要关注

  • 本地办法栈 :
  • 寄存器 :
  • 一维数组内存图:

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- 二维数组遍历

  • 思路 :

    • 遍历二维数组, 获取到每一个一维数组
    • 持续遍历一维数组, 获取具体的元素
  • 代码 :
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- 二维数组内存图

  • 二维数组:
退出移动版