【Java基础】数组

发布于:2023-01-17 ⋅ 阅读:(410) ⋅ 点赞:(0)

目录

 1.5 数组的工具类Arrays

3. 数组使用的常见问题

 4.3 Debug的按键及功能

1. 数组

1.1 静态初始化数组

定义数组的时候直接给数组赋值

1. 静态初始化数组的格式

数据类型[ ]  数组名 = { 元素1,元素2,元素3... };

   int[ ] a = {1,2,3,4,5};

数据类型[ ]  数组名 = new 数据类型[ ] { 元素1,元素2,元素3... };

int[ ] a = new int[ ]{1,2,3,4,5};

2. 数组是属于什么类型,数组变量名中存储的是什么?

引用数据类型,存储的数组在内存中的地址信息

1.2 动态初始化数组

定义数组的时候 只确定元素的类型和数组的长度,之后再存入具体数据

1. 数组的动态初始化格式

 数据类型[ ]  数组名 = new 数据类型[ 长度 ];

int[ ] a = new int[5];

2. 两种数组定义时的特点和场景有什么区别

 当前已经知道存入的元素值,用静态初始化

当前还不清楚要存入哪些数据,用动态初始化

3. 动态初始化数组元素的默认值是什么样的

byte、short、int 、char、long类型数组元素的默认值都是 0

float、double类型数组元素的默认值都是 0.0

boolean类型数组元素的默认值是 false 、String类型数组元素的默认值是 null

1. 3 数组的创建过程

1. 在内存中开辟连续的空间,用来存放数据

2. 给数组完成初始化过程,给每个元素赋予默认值

3. 数组完成初始化会分配一个唯一的地址值

4. 把唯一的地址值交给引用类型的变量a去保存

5. 如果想要操作数组中的元素,可以根据变量保存的地址找到数组,然后根据下标来操作数组的具体元素

数组名保存的是数组的地址值,不是数组中每一个具体的元素,数组名是一个引用类型的变量

1.4 数组的特性

  1. 数组的长度通过**数组名.length;**来获取
  2. 数组一旦创建,长度无法改变
  3. 数组的下标从0开始,最大下标为数组长度-1
  4. 如果访问到了不存在的下标,会数组下标越界异常

1.5 数组的工具类Arrays

1. toString(数组名),除了char类型以外,其他类型的数组想要查看数组的具体元素,都得使用这        个方法,如果不用,打印是数组的地址值

2. sort(数组名),给数组进行排序

3. copyOf(要复制的数组,新数组的长度)

如果新的长度大于原数组的长度–数组的扩容

如果新的长度小于原数组的长度–数组的缩容

如果新的长度等于原数组的长度–普通的复制

注意:不管是什么长度,都不是修改原数组,而是创建新数组

2. 数组的遍历

1. 如果只是想查看数组中有哪些元素,直接使用System.out.println(Arrays.toString(数组名));就可以

2. 如果想要拿到数组中的一个个的具体元素,或者是对数组中的元素做进一步的操作,就需要对数组进行遍历

3. 遍历:把数组中的所有元素,从头到尾逐个“过一遍”

4. 通过循环遍历数组,所以循环中的循环变量代表的是数组的下标

package com.example.basic;
/*本类用于复习数组的操作*/
public class TestArray {
    public static void main(String[] args) {
        //需求1:求出数组中所有元素之和
        //f1();
        //需求2:求出数组中所有元素的最大值
        f2();
    }

    private static void f2() {
        //需求2:求出数组中所有元素的最大值
        //1.定义一个数组
        int[] a = {10,20,98,40,55};
        //2.定义一个变量,用来存储结果,也就是数组中所有元素的最大值
        int max = a[0];//这个位置不能写0,应该是数组中的第一个元素
        //3.遍历数组,依次拿出数组中的每一个元素与之前设定的元素做比较
        for (int i = 0; i < a.length; i++) {
            //4.判断当前遍历到的元素,与max谁大
            if(a[i]>max){//如果当前遍历到的元素比max大
                max = a[i];//就把遍历到的这个元素的值赋值给max
            }
        }
        //5.循环结束,输出数组中最大的值
        System.out.println("数组中的最大值为:"+max);
    }

    private static void f1() {
        //需求1:求出数组中所有元素之和
        //1.定义一个数组
        int[] a = {12,12,22,22,22};
        //2.定义一个变量,用来保存最终求和的结果
        int sum = 0;
        //3.通过数组的遍历,遍历数组中的每一个元素,然后累加
        for (int i = 0; i < a.length; i++) {
            sum = sum + a[i];
        }
        System.out.println("数组累加所有元素之和为:"+sum);
    }
}

3. 数组使用的常见问题

1. 如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)

int [ ] arr = new int [ ] {11,22,33};

System.out.println(arr[2]);

2. 如果数组变量中没有存储数组的地址,而是null, 在访问数组信息时会出现NullPointerException(空指针异常)

arr = null;

System.out.println(arr); //null

// System.out.println(arr.length);  //出现异常

4. Debug工具的使用

4.1 Debug概念

Debug是一种程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。

4.2 Debug的操作流程

Debug调试,又被称为断点调试,断点是一个标记,告诉我们从哪里开始查看。操作流程具体分为以下几个步骤:

1. 如何加断点

2. 如何运行加了断点的程序

3. 看哪里

 

4. 点哪里

5. 如何删除断点

与增加断点相同。

4.3 Debug的按键及功能

Show Execution Point(显示执行点):如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行

Step Over(步过) :一行一行地往下走,如果这一行上有方法 不会进入方法 。

Step Into(步入):如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内, 不会进入官方类库的方法

Force Step Into (强制步入):能进入任何方法,查看底层源码的时候可以用这个 进入官方类库的方法 。

Step Out (步出):从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。

(将执行点移回方法调用,从堆栈中删除当前方法帧)

Drop Frame(退回断点):从当前位置退回到之前断点处。有时候当我们步入方法体之后,还想回退到方法体外,点这个按钮后,断点重新回到方法体之外。在继续还是可以再次进到方法内。

Run to Cursor (运行到光标处):你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。

Evaluate Expression计算表达式:使用这个操作在调试过程中计算某个表达式的值,而不用再去打印信息。

重启

Stop:关闭程序。

修改运行配置

Resume Program:恢复程序,比如,你在第20行和25行有两个断点,当前运行至第20行,使用这个操作运行到下一个断点(即第25行),如果下面没有断点了,再使用这个操作,则运行完整个流程。

Pause Program:暂停程序,启用Debug。

View Breakpoints:查看所有断点。

Mute Breakpoints:隐藏断点,选择这个后,所有断点变为灰色,断点失效。再次点击,断点变为红色,有效。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到