知识点总结Day05——数组

目录

第一章 数组

一、数组的概念

1.1 数组的概念

1.2 数组的定义格式

1.3 数组的特点

二、数组的访问方法

2.1 索引的定义

2.2 数组的长度

2.3 通过索引访问数组的元素

第二章 内存图

一、Java中的内存划分

二、数组的内存图

2.1 一个数组的内存图

2.2 两个数组内存图

2.3 一个数组引用另一个数组的内存图

三、数组常见的操作类型

3.1 数组空指针索引异常

3.2 空指针异常

3.3 获取数组的长度

3.4 数组的遍历输出

3.5 求出数组中的最值

3.6 对数组元素进行反转

3.7 数组作为参数使用


声明:本文整理于黑马程序员的Java教学视频,仅可作为资料参考学习使用,侵权请联系删除。

第一章 数组

一、数组的概念

1.1 数组的概念

数组是指存储数据长度固定的容器,其中多个数据的数据类型一致。

容器:是将多个数据存储到一起,每个数据称为该容器的元素。

1.2 数组的定义格式

1)指定数组固定长度定义数组【动态初始化】:

数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];

数组存储的数据类型: 创建的数组容器可以存储什么数据类型。

[] : 表示数组。

数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。

new:关键字,创建数组使用的关键字。

数组存储的数据类型: 创建的数组容器可以存储什么数据类型。

[长度]:数组的长度,表示数组容器中可以存储多少个元素。

注意:数组有定长特性,长度一旦指定,不可更改。

动态初始化时数组的默认值:

数组数据类型初始化默认值
整数类型0
浮点类型0.0
字符类型\u0000
布尔类型false
引用类型null

2)指定数组内容定义数组【静态初始化】:

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

3)通过直接赋值定义数组【省略型静态初始化】:

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

1.3 数组的特点

① 数组是一种引用数据类型。

② 数组中的多个数据,数据类型必须是一致的

③ 数组的长度在程序运行期间不可改变。

二、数组的访问方法

2.1 索引的定义

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引 (index),可以通过数组的索引访问到数组中的元素。

数组名[索引];

2.2 数组的长度

数组具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。因此,数组的最大索引值数组名.length-1

2.3 通过索引访问数组的元素

为数组中的元素赋值

数组名[索引] = 数值;

获取出数组中的元素

变量 = 数组名[索引];

第二章 内存图

一、Java中的内存划分

1)栈(Stack):存放的是方法中的局部变量。

方法一定在栈中运行

名称含义
局部变量方法的参数,或者是方法的大括号中的变量
作用域一旦超出作用域,就从栈内存中消失

2)堆(Heap):通过”new“生成的东西,都存放在堆中。

堆内存里面的东西都具有一个十六进制的地址值

堆内存中的数据的数据类型默认值
整数0
浮点数0.0
字符\u0000
布尔false
引用类型nul

3)方法区(Method Area):存储.class文件信息,包含方法的信息。

4)本地方法栈(Native Method Area):与操作系统有关。

5)寄存器(pc Reister):与中央处理器(CPU)有关。

二、数组的内存图

2.1 一个数组的内存图

public class MyOneArray {
    public static void main(String[] args) {
        int[] myonearray = new int[3];
        System.out.println(myonearray);
        myonearray[1] = 1;
        myonearray[2] = 2;
        System.out.println(myonearray);//数组地址值
        System.out.println(myonearray[0]);//默认值0
        System.out.println(myonearray[1]);//1
        System.out.println(myonearray[2]);//2
    }
}

2.2 两个数组内存图

public class MyTwoArray {
    public static void main(String[] args) {
        int[] arr1 = new int[3];
        arr1[1] = 1;
        arr1[2] = 2;
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
​
        int[] arr2 = new int[3];
        arr2[1] = 3;
        arr2[2] = 4;
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

2.3 一个数组引用另一个数组的内存图

public class MySameArray {
    public static void main(String[] args) {
        int[] arrone = new int[3];
        arrone[1] = 10;
        arrone[2] = 20;
        System.out.println(arrone);
        System.out.println(arrone[0]);
        System.out.println(arrone[1]);
        System.out.println(arrone[2]);
        int[] arrtwo = arrone;
        arrtwo[1] = 1;
        arrtwo[2] = 2;
        System.out.println(arrtwo);
        System.out.println(arrtwo[0]);
        System.out.println(arrtwo[1]);
        System.out.println(arrtwo[2]);
    }
}

三、数组常见的操作类型

3.1 数组空指针索引异常

就是指数组索引值超出数组既定范围,构成异常。

public class MyErrorArray {
    public static void main(String[] args) {
        int[] arr = new int[3];
        for (int i = 0; i < 3; i++) {
            arr[i] = i;
        }
        System.out.println(arr[0]);//0
        System.out.println(arr[1]);//1
        System.out.println(arr[2]);//2
        System.out.println(arr[3]);//Error错误写法,索引越界
    }
}

程序不能访问数组中不存在的索引,程序运行后,会抛出 ArrayIndexOutOfBoundsException 数组索引越界异常。

3.2 空指针异常

在数组初始化时对其赋值null,没用使用new创建。

public class MyNullArray {
    public static void main(String[] args) {
        int[] arr = null;
        System.out.println(arr[0]);
    }
}

变量arr没有保存数组的内存地址,所以不允许再操作数组了,因此程序运行的时候会抛出 NullPointerException 空指针异常。

3.3 获取数组的长度

通过数组名.length方法获取数组的长度,数组一旦创建,长度不变

public class MyArrayLength {
    public static void main(String[] args) {
        int[] arr = new int[]{1,54,1,6,662,6154,1665,1564,56456,4648,2,3,5,5,23,2,5,3,5,6,};
        System.out.println(arr.length);
    }
}

3.4 数组的遍历输出

遍历数组的定义

对数组中的每一个元素进行逐一处理,默认处理方式为打印输出。

public class MyArray {
    public static void main(String[] args) {
        int[] arr = new int[20];
        for (int i = 0; i < 20; i++) {
            arr[i] = i+2;
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i < arr.length-1) {
                System.out.print(arr[i] + ",");
            } else {
                System.out.println(arr[arr.length-1] + "]");
            }
        }
    }
}

3.5 求出数组中的最值

1)求最大值

public class MyArrayMax {
    public static void main(String[] args) {
        int[] arr = {1,52,3,564,12,46,5};
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        System.out.println("最大值为:" + max);
    }
}

2)求最小值

public class MyArrayMax {
    public static void main(String[] args) {
        int[] arr = {1,52,3,564,12,46,5};
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < max) {
                min = arr[i];
            }
        }
        System.out.println("最小值为:" + min);
    }
}

3.6 对数组元素进行反转

选定中值,对数组元素进行位置对称交换。

public class MyReverseArray {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
        System.out.println("\n_____");
        for (int min = 0,max = arr.length-1;min<max;min++,max--) {
            int d = arr[min];
            arr[min] = arr[max];
            arr[max] = d;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
    }
}

3.7 数组作为参数使用

public class MyParmArray {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        printTheArray(arr);
    }
    public static void printTheArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i < arr.length-1) {
                System.out.print(arr[i] + ",");
            } else {
                System.out.println(arr[arr.length-1] + "]");
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值