黑马java笔记第四讲—数组

个人介绍

大家好,我是:知识的搬运工旺仔

认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥

你的支持,是我每天更新的动力。

赞点: 留言:✍ 收藏:⭐

个人格言:想法一步一步的落实,才是你我前进最佳选择。

1什么是数组

数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致

2. 数组定义格式

2.1 第一种

数据类型[] 数组名

实例:

int [] arr;
double[] arr1;

2.2 第二种

数据类型 数字名[]

实例

int arr[];
double arr1[];

3 数组的动态初始化

3.1 什么是动态初始化

数组动态初始化是只给定数组的长度,有系统给出默认初始值

3.2动态初始化格式

数据类型[] 数字名 = new 数据类型[数组的长度];
int[] arr = new int[3];

3.3 动态初始化格式详解

1 )等号左边:

  1. int : 数组的数据类型
  2. [] : 代表这是一个数组
  3. arr:代表数组名

2 )等号右边

  1. new:为数组开辟内存空间
  2. int:数字的数据类型
  3. [ ] :代表这是一个数组
  4. 3 :代表数组的长度

4 数组元素访问

4.1 什么是索引

每个存储到数组的元素,都会自动的拥有一个编号,从0开始

这个自动编号称为数组索引(index),可以通过数组的索引访问数组中的元素

4.2 访问数组元素格式

数组名[索引];

4.3 实例代码

public class ArrayDemo {
    public static void main(String[] args)  {
        int[] arr = new int[3];
        
        //输出组数名
        System.out.println(arr);  //输出的是数组的起始地址
        
        //输出数组中的元素
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

5 内存分贝

5.1 内存概述

内存是计算机的重要原件,临时存储区域,作用是运行程序。

我们编写的程序是存放在硬盘中的,在硬盘中的程序时不会运行的。

必须放进内存中才能运行,运行毕业后会清空内存

Java虚拟机要运行程序,必须要对内存进行空间的分配和管理

5.2 java中内存分配

目前我们只需要记住两个内存,分别时:栈内存和堆内存

区域名称 作用
寄存器 给CPU使用,和我们开发无关
本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关
方法区 存储可以运行的class文件
堆内存 存储对象或者数组,new 来创建的,都存储在推内存
方法栈 方法运行时使用的内存,比如main()方法运行,进入方法栈中执行

6 数组静态初始化

6.1 什么时静态初始化

在创建数组时,直接将元素确定

6.2 静态初始化格式

  1. 完整版格式
数据类型[] 数组名 = new 数据类型[] {元素1,元素2,...};
  1. 简化版格式
数据类型[] 数组名 = {元素1,元素2,...}

6.3 示例代码

public class ArrayDemo {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {1,2,3};
        //输出数组名
        System.out.println(arr);
        
        //输出数组元素
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

7 数组操作的两个常见问题

7.1 索引越界异常

  1. 出现原因
public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
    }
}

数组长度为3,索引范围是0-2,但是我们却访问了一个3的索引

程序运行后,将会抛出ArrayIndexOutBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现,就必须要修改我们的代码

  1. 解决方案

    将错误的索引修改为正确的索引范围

7.2 空指针异常

  1. 出现原因
public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        //把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}

arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址中,也就是不允许在操作数组了,因此运行的时候会抛出NullPointerException空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现,就必须要修改我们编写的代码

  1. 解决方案

给数组一个真正的堆内存空间引用即可!

8 数组遍历

  • 数组遍历:就是将数组中的每一个元素分别获取出来,就是遍历,遍历也是数组操作中的基石。
public class ArrayTest01 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
        System.out.println(arr[4]);
        
    }
}

以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造循环的写法。数组的索引是0 到lenght-1,可以作为循环的条件出现。

public class ArrayTest01 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {11,22,33,44,55};
        
        //使用通用的遍历格式
        for(int x =0; X<arr.length;x++) {
            System.out.println(arr[x]);
        }
    }
}

9 数组最值

1 )最大值获取:从数组的所有元素中找出最大值

2 )实现思路:

  1. 定义变量,保存数组0索引上的元素
  2. 遍历数组,获取出数组中的每个元素
  3. 将遍历到的元素和保存数组0索引上值的变量进行比较
  4. 如果数组元素的值大于变量的值,变量记录住新值
  5. 数组循环遍历结束,变量保存的就是数组中最大的值

3 )代码实现

public static void main(String[] args) {
    //定义数组
    int[] array = {12,45,98,73,60};
    //定义一个变量,用于保存最大值
    //获数组中第一个数据作为变量的初始值
    int max = array[0];
    
    //与数组中剩余的数据逐个对比,每次对比将最大值保存到变量中
    for(int x =1; x<array.length;x++) {
        if(arr[x] > max ) {
            max = array[x];
        }
    }
    
    //循环结束后打印变量的值
    System.out.println("max:" + max);
}

看完了不妨给我点个赞吧,你的支持,是我每天更新的动力…

你可能感兴趣的:(初学java,java,数据结构,算法)