数组
数组:就是数据小组。像个装数据的容器。然后每个数据称为该容器的元素。
但是数组的长度是固定的,并且装的每个数据的类型要一致。
格式: 1.数据类型[] 数组的名称 = new 数据的类型[数据的个数];
2.数据类型[] 数组的名称 = new 数据类型[]{元素1,元素2,元素3... ...};
3.数据类型[] 数组的名称 = {元素1,元素2,元素3... ...}
·数据的类型:这个数组只能装该类型的数据
·[]:中括号,是数组的代表符号。(见到中括号,就知道是数组)
·new:关键字,创建数组使用的关键字
·[存储数据的个数]:决定了这个数组能存储多少个元素
附:1.知道需要存储元素的个数时,使用格式1;否则就用格式2,或格式3;
2.数组一旦创建,长度不能发生改变,数组具备【定长特性】;
3.数组本身是一种引用数据类型;
4.数组中可以存储基本类型数据,也可以存储引用类型数据,
基本数据类型的默认值为各个类型的0值,而引用类型的默认值为null;
5.定义数组,必须知道数组的长度或需要存储的元素。
数组中的元素怎么取出来呢?
一本书都有页码,数组的叫索引,每个存储到数组中的元素,都会被自动分配一个索引,从0开始,可以通过索引访问数组中的元素。
数组中的元素用索引怎么表示:数组名称[索引];
数组的长度怎么表示:数组名称.length;
怎么修改数组的元素:数组名称[索引] = 数值;
1 public static void main(String[] args) {
2 // 定义一个数组
3 int[] arr = new int[3];
4 //只知道数组的长度为3,此时数组中存储的是int型的默认值,三个0;
5 //给数组中的元素赋值(一定记得数组索引是已知的,且从0开始)
6 arr[0] = 10;
7 arr[1] = 20;
8 arr[2] = 30;
9 //定义一个数组,将数组arr赋值给arr2数组
12 //数组为引用类型,引用类型的值可以变,内存地址不会变
13 int[] arr2 = arr;
14 //相当于一个数组的地址有了两个名字,叫arr 和 arr2
15 arr2[1] = 50;
16 //把数组arr2中第二个元素修改为50
17 //查看arr数组当中的第二个元素
18 System.out.println(arr[1]);
19 }
数组常遇见的问题:
1.数组索引从0开始,一个数组的索引值为 0 到(数组.length-1),如果访问数组时,索引不在这个范围的话,会出现下表越界异常,然后导致程序终止。
1 int[] arr = new int[6];
2 System.out.println(arr[6]); // 6就不在索引值范围
1 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
2 at exsercise.Test.main(Test.java:20)
2.在程序运行过程中,有一个内存中不存在的一个变量被引用到了,就会出现数组空指针异常
1 int[] arr = new int[6];
2 arr = null;
3 System.out.println(arr[2]);
1 Exception in thread "main" java.lang.NullPointerException
2 at exsercise.Test.main(Test.java:21)
数组的遍历:
1 public static void main(String[] args) { 2 // 静态初始化一个int数组 3 int[] arr = {1,2,3,4}; 4 // 数组遍历 for或者while 5 for (int i = 0; i <= arr.length-1; i++) { //遍历容器时,初始化语句当中的循环变量一般都是索引值 6 System.out.println(arr[i]); 7 } 8 }
注意:只有一点:索引的范围,千万不能写错
练习:找出数组中的最大值
1 /* 思路: 1.定义一个最大值,给最大值随意赋一个数组中的值 2 2.遍历整个数组 3 3.数组中每个元素都和最大值作比较,比最大值大,就把这个值给最大值 4 */ 5 public static void main(String[] args) { 6 int[] arr = {3000,200,1000,10000,5000}; 8 // 定义一个最大值变量,暂时赋值为数组当中的第一个元素 9 int max = arr[0]; 10 for (int i = 1; i <= arr.length-1; i++) { 11 //将遍历到的元素和保存的最大值变量进行比较 12 if (arr[i] > max) { 13 //如果数组元素大于最大值max,就把数组元素赋值给最大值变量 14 max = arr[i]; 15 } 16 } 17 //数组遍历结束,最大值变量保存的就是数组当中的最大值 18 System.out.println("数组的最大值是:" + max); 19 }
------------------华丽的分割线------------------
内存时计算机中一个很重要的原件,临时存储的区域,作用是当程序运行过程中,我们编写的代码文件放在硬盘当中,硬盘当中的程序文件不会运行,存放到内存当作,当程序运行完毕后程序会清空内存。
java虚拟机当中的内存划分:为了提高运算效率,对内存空间进行不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式。
| 区域名称 | 作用 |
| 寄存器 | 给cpu使用,和开发没有关系 |
| 本地方法栈 | JVM在使用操作系统功能时使用的,和的开发没有关系 |
| 方法区 | 存储可以运行的class文件(常量池,静态域) |
| 方法栈(stack) | 方法运行时使用的内存,比如说main方法运行,进行方法栈当中运行 |
| 堆内存(heap) | 存储对象或者数组,new出来的对象,都统统存储在堆内存当中 |
数组的内存存储:
1 public static void main(String[] args) {
2 int[] arr = new int[3];
3 System.out.println(arr);// 内存地址哈希值
4 }
-
main方法进入方法栈中执行
-
创建数组。JVM会在堆内存当中开辟空间,存储数组
-
数组在内存当中会有自己的内存地址,以十六进制表示
-
数组当中有长度的话,存储的是各个类型的默认0值
-
JVM将数组的内存地址赋值给引用类型变量(数组名称)
-
变量arr保存的数组是在内存当中的地址,而不是一个具体的数值。
浙公网安备 33010602011771号