【阿里云】Java面向对象开发课程笔记(二)——数组的定义与使用

1. 数组的定义与使用

1.1 数组基本概念

  数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于引用数据类型,因此牵扯到内存分配,数组定义语法有如下两类:

  • 数组动态初始化:
    • 声明并开辟数组:
      1.数据类型 [] 数组名称 = new 数据类型 [长度];
      2.数据类型 数组名称 [] = new 数据类型 [长度];
    • 分步进行数组空间开辟(实例化):
      • 声明数组:1.数据类型 数组名称 [] = null;
                  2.数据类型 [] 数组名称 = null;
      • 开辟数组空间:数组名称 = new 数据类型 [长度];

  当数组开辟空间之后,就可以采用如下的方式进行操作:

  • 数组的访问通过索引完成,即:“数组名称[索引]”,数组的索引由0开始。可使用的索引范围为0~数组长度-1。
  • 当数组采用动态初始化开辟空间之后,该数组每个元素都是该数组对应数据类型的默认值。
  • 如果此时数组访问的时候超过了数组的索引范围,则会产生“ArrayIndexOutOfBoundsException”。
  • 数组本身是一个有序的集合操作,所以对于数组的内容操作往往采用循环的模式完成。数组是一个有限的集合,应使用for循环。
  • 在Java中提供有一种动态取得数组长度的方法:数组名称.length。

范例:定义一个int型数组

代码

public class ArrayDemo {
    public static void main (String args[]){
        int a [] = new int [3]; // 开辟了一个长度为3数组空间
        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
        // System.out.println(a[3]);
        // 超出索引范围,程序报错,数组越界异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    }
}/* 输出结果:
0
0
0    */

范例:循环输出数组内容

代码

public class ArrayDemo {
    public static void main (String args[]){
        int a [] = new int [3]; // 开辟了一个数组空间
        a [0] = 10; // 第一个元素
        a [1] = 20; // 第二个元素
        a [2] = 30; // 第三个元素
        System.out.println(a.length);
        for (int i = 0 ; i < a.length ; i++){
            System.out.println(a[i]); // 通过循环控制索引
        }
     }
} /*  输出结果:
3
10
20
30    */

范例:采用分步模式开辟数组空间

代码

public class ArrayDemo {
    public static void main (String args[]){
        int a [] = null;
        a = new int [3]; // 开辟了一个数组空间
        for (int i = 0 ; i < a.length ; i++){
            System.out.print(a[i] + " ");
        }
    }
}// 输出结果:0 0 0

在数组使用之前一定要开辟空间(实例化),如果使用了没有开辟空间的数组,一定会出现“NullPointerException”异常信息。

1.2 数组引用传递

范例:观察一道程序

代码

public class ArrayDemo {
    public static void main (String args[]){
        int data [] = null;
        data = new int [3]; // 开辟了一个数组空间
        data [0] = 10; // 第一个元素
        data [1] = 20; // 第二个元素
        data [2] = 30; // 第三个元素
    }
}

内存分析如下:
这里写图片描述

  引用数据类型,就一定能发生引用传递,本质:同一块堆内存可以被不同的栈内存所指向。
范例:观察一道程序

代码

public class ArrayDemo {
    public static void main (String args[]){
        int data []  = new int [3]; // 开辟了一个数组空间
        int temp [] = null; // 声明
        data [0] = 10; // 第一个元素
        data [1] = 20; // 第二个元素
        data [2] = 30; // 第三个元素
        // 如果要发生引用传递,不要出现[]
        temp = data; // int temp [] = data;
        temp [0] = 99;
        for (int i = 0 ; i < data.length ; i++){
            System.out.print(data[i] + " ");
        }
    }
} // 输出结果:99 20 30

内存分析如下:
这里写图片描述

1.3 数组静态初始化

  之前定义数组的特点:数组首先开辟内存空间,而后在使用索引进行内容的设置,这属于数组动态初始化,如果希望数组在定义的时候可以同时设置内容,就可以采用静态初始化完成。
  数组的静态初始化分为以下两种:

简化格式 完整格式(建议使用)
数据类型 数组名称 [] = {值,值,···,值}; 数据类型 数组名称 [] = new 数据类型 [] {值,值,···,值};

范例:静态初始化数组

代码

public class ArrayDemo {
    public static void main (String args[]){
        int data []  = {
  1,2,23,4,56,34,123,1234,346,54}; 
        for (int i = 0 ; i < data.length ; i++){
            System.out.print(data[i] + " ");
        }
    }
} // 输出结果:1 2 23 4 56 34 123 1234 346 54

范例:完整格式静态初始化数组并使用匿名对象

代码

public class ArrayDemo {
    public static void main (String args[]){
        System.out.print(
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值