java基础知识之数组

大一,正在学习java中,文章有什么不对的地方,欢迎大家交流指正,共同学习进步!

文章目录

  • 数组的使用
    • 一.数组概述
    • 二.数组动态初始化
    • 三.数组静态初始化
    • 四.使用数组常见的问题(数组异常)
    • 五.遍历数组

数组的使用

一.数组概述

  1. 含义:是使用一个容器来存储一组相同数据类型数据的存储模型

  2. 定义格式:

    元素数据类型[] 数组名=new 元素数据类型[元素个数];如:int[] arr=new int[3]


二.数组动态初始化

  1. 初始化概述:数组必须先初始化,然后才能被使用;初始化是表示为这个数组元素分配的内存空间,并往内存空间的每个元素位置存储数据或赋值
  2. 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
  3. 格式:
    元素数据类型[] 变量名=new 元素数据类型[数组长度]
  4. 元素赋值方式:
    数组名[元素索引] = 元素值
  5. 索引(index): 代表每个元素在数组的位置, 是从0开始,是连续的,逐一增加,索引别称: 下标, 脚标;

特点:

  • 元素要一个一个赋值

  • 如果你没有给某个位置的元素赋值,这个位置元素也是有默认值的

  • 整型数据:默认值是0;浮点数:0.0;布尔类型:false;字符:空字符;引用数据类型:null

  1. 案例:
 public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        arr[0] = 10;
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);       
/*      
int 数组中的元素为int数据类型
[]定义数组
arr 数组变量名,小驼峰命名法
=  赋值运算符把数组在堆区申请内存空间的首地址赋值给数组名存储
new 给数组申请分配内存空间
3 是数组的长度 存放元素的个数 元素的个数: 决定数组一共要在内存中申请多大空间
总空间 = 元素个数 * 元素数据类型字节数
[I@7c30a502 [: 表示打印的是一个一维数组
I:表示数组中元素的数据类型, I就代表是int类型
@:普通的分隔符
7c30a502:是数组的内存地址,
这个数字是真正的地址通过hashCode的方法计算得到的,
由于前身还是内存中地址,所以java中就管这个值叫做内存地址,
表示方式是16进制的数据表示
*/       
    }
}            

7.示意图表示数组访问原理:

java基础知识之数组_第1张图片

栈内存首先是一片内存区域,存储的都是局部变量

堆内存:存储的是数组和对象(其实数组就是对象),反是new建立的都是在堆中

堆中存放的都是实体(对象);int[] arr=内存地址=[I@7c30a502

new int[3]==都会先在堆内存空间中开辟一块空间

栈空间通过内存地址访问堆内存

数组名赋值给另一个数组名, 则两个数组名存储一样地址, 他们两指向同一块堆区空间


三.数组静态初始化

  1. 静态初始化:初始化时指定每个数组元素初始值,由系统决定数组长度

  2. 静态初始化格式:

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

注意:

  • 第二个中括号中不要写元素个数

  • 大括号中元素的格式: 每个元素之间用逗号隔开, 最后一个元素后不写逗号

  • 大括号中每个元素的数据类型和前面定义的元素数据类型相同

  • 数组元素个数由静态初始化时赋值的个数决定

  1. 静态初始化的简化版:
    格式: 元素数据类型[] 数组名 = {元素1, 元素2,元素3, …}
    如:int[] arr={1,2,3,4}

完整版和简化版的区别:

  1. 完整版数组名定义和赋值过程可以分离;

  2. 简化版定义和赋值不能分离

  1. 动态初始化适用于不知数组中要放什么数据,但只知道数组中应存储的元素个数

静态初始化适用于明确知道数组中应该放那些数据


四.使用数组常见的问题(数组异常)

  1. Excetption in thread “main” java.lang.ArrayIndexOutOfBoundsException: 越界下标

  2. 数组越界异常产生的原因:

    访问数组时访问了不存在的索引, 只要超出这个范围就会抛出数组越界异常

  3. Exception in thread “main” java.lang.NullPointerExceptoion 空指针异常类

    空指针异常:空: null,一旦一个引用类型变量被赋值为空, 它就不在记录堆区的某个地址

  4. 空指针异常的原因: 当引用类型变量不再指向任何位置时,还要使用这个变量,就会抛出这个空指针异常

    解决空指针异常的方式: 在使用一个引用类型变量的时候,先判断它是否等于空,不等于空采取使用


五.遍历数组

  1. 遍历: 一个一个的访问数组中每一个元素, 并把每一个元素打印出来;
  2. 遍历数组的方式:
  • 通过循环, 根据数组中索引值的改变一个一个取出元素,并打印
  • 使用穷举法,一个一个打印出来
  1. 获取数组长度的格式: 数组名.length 返回值就是数组的长度

使用循环遍历数组时的注意事项:

  • 循环变量的范围 [0, 长度-1]

  • 循环增量是 +1

  • 循环判断条件: 下标变量 < 数组长度

  1. 案例:
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] arr={123,456,789,555,444,3333,22};
       for(int i=0;i<arr.length;i++){
           System.out.println(arr[i]);
       }
    }
}
  1. 查找最大值:
public class ArrayDemo3 {
    public static void main(String[] args) {
        int[] arr = {3,53,2,55,36,78,43,88};

        // 定义一个变量max
        int max = arr[0];

        for(int i = 1; i < arr.length; i++){
            //如果max的值比当前取出数组中值小,
            // 就把当前取出数组中的值放到max中
            if(max < arr[i]){
                max = arr[i];
            }
        }
        System.out.println("最大值是:"+max);
    }
}

你可能感兴趣的:(笔记,java,开发语言,后端)