数组

数组:就是数据小组。像个装数据的容器。然后每个数据称为该容器的元素。

      但是数组的长度是固定的,并且装的每个数据的类型要一致。

格式: 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     }

 

程序执行流程:

  1. main方法进入方法栈中执行

  2. 创建数组。JVM会在堆内存当中开辟空间,存储数组

  3. 数组在内存当中会有自己的内存地址,以十六进制表示

  4. 数组当中有长度的话,存储的是各个类型的默认0值

  5. JVM将数组的内存地址赋值给引用类型变量(数组名称)

  6. 变量arr保存的数组是在内存当中的地址,而不是一个具体的数值。

 

posted @ 2020-11-29 22:26  转角的遇见  阅读(86)  评论(0)    收藏  举报