重新认识java(十一)---- java中的数组

本文详细介绍了Java中的数组,从数组的基本概念、定义与初始化,到数组的使用、高级应用和内存模型。强调了数组是对象,具有length属性,且在内存中以特定方式存储。数组的协变特性在早期版本中是为了兼容性而设计,但可能导致类型安全问题。文章还讨论了数组不支持泛型的原因,并提供了数组操作和复制的方法。最后,文章探讨了数组的内存布局,包括一维和二维数组的表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象的一些知识暂时告一段落,从本文开始,进入java语法的重学阶段~

初识数组

什么是数组

数组:相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。

数组的定义及初始化

定义及动态初始化
  • 方式一,java推荐用法: type [] 变量名 = new type[数组中元素的个数];

  //举例
  int[] a = new int[10];
   for (int i = 0; i < a.length; i++){
       a[i] = new Random().nextInt();
   }
  • 方式二,c语言用法(不推荐): type 变量名 [] = new type[数组中元素的个数];
   int a[] = new int[10];
    for (int i = 0; i < a.length; i++){
        a[i] = new Random().nextInt();
    }

以上两种方式都叫做动态初始化,也就是说,只有当程序运行以后,你才能知道数组里到底存了哪些数据。方式二的命名方式c和c++程序员比较熟悉,但是java官方推荐使用第一种,一看就能知道,这是一个int型的数组,叫a。

静态初始化
int[] b = new int[]{
  
  1,2,3};

在定义数组的时候直接初始化,大括号里的值就是数组的值。

隐式初始化
int[] c = {
  
  1,2,3};

可以不写new,直接使用大括号初始化,但是本质上还是调用了new的,只是可以不写出来而已,所以叫隐式初始化。


最后,我们回过头来仔细的研究一下下面这一句代码:

int[] a = new int[10];

这句代码做了哪些事呢?

  1. int[] a: 定义了一个int型数组的引用,名字叫做a,存放在栈中。
  2. new int[10]:初始化一个长度为10的int型数组,在堆中开辟相应大小的内存。
  3. int[] a = new int[10]:将堆中开辟的数组的内存地址赋给数组引用a。

这样就可以通过a这个变量,来操作这个数组了。

是不是觉得这个过程很熟悉?没错!我们创建一个对象的过程也是这样的!那这是不是证明,数组其实是一个对象呢?我们后面会详细分析。

数组的使用

数组自身的使用

数组是使用方式大家应该都很清楚了,我这里简单的提一下。

数组的遍历
  • 方式一:for循环
      for (int i = 0; i < myList.length; i++) {
          System.out.println(myList[i] + " ");
      }
  • 方式二:foreach循环
      for (int element: myList) {
         System.out.println(element);
      } 
数组长度
int length = myList.length;

java中的每个数组都有一个名为length的属性,表示数组的长度。

length属性我们后面会详细分析。

数组元素不为基本数据类型

数组是可以存放任意类型的数据的,不一定非得是基本数据类型。数组元素不为基本原生数据类型时,存放的是引用类型,而不是对象本身。当生成对象之后,引用才指向对象,否则引用为null。

        Person[] p = new Person[3];

        //未生成对象时,引用类型均为空
        System.out.println(p[0]);


        //生成对象之后,引用指向对象
        p[0] = new Person(10);
        p[1] = new Person(20);
        p[2] = new Person(30);

        for(int i = 0; i < p.length; i++){
            System.out.println(p[i].age);
        }
数组作为方法的参数
public void printArray(int[] array) {
  for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + " ");
  }
}
数组作为方法的返回值
public int[] reverse(int[] list) {
  int[] result = new int[list.length];

  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
   
   
    result[j] = list[i];
  }
  return result;
}
数组内容的输出

首先,这样写是不对的。


                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值