Java基础——数组

数组类型

数组也是一种类型

  Java的数组要求所有的数组元素具有相同的数组类型。因此,在同一个数组中,数组元素的类型是唯一的。但是相互继承的类与类之间,可以看作类型是唯一的。
  Java的数组既可以存放基本类型的数据,也可以存放引用类型的数据。值得指出的是,数组也是一种数据类型,不过它本身是一种引用类型。

定义数组

  Java语言支持两种语法格式定义数组:

type[] arrayName;
type arrayName[];

  不过我们建议使用第一种,第一种格式有较好的语意,容易理解。数组是一种引用类型的变量,因此它在定义一个变量的时候,仅仅表示它定义了一个引用类型(可以近似看作为一个指针),但这个引用类型并未指向任何有效内存,所以我们得对它进行初始化。

数组的初始化

  Java语言的数组必须先进行初始化后才可以开始使用。所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋值。那我们能不能只申请内存空间而不进行初始化?大家想下这个问题。
  数组有两种初始化方式,分别为:

  • 静态初始化:初始化时,程序员指定每个数组元素的初始值
  • 动态初始化:初始化时,程序员指定数组的长度,由系统为我们分配初始值

静态初始化
  静态初始化的语法格式如下:

arrayName = new type[] {element1, element2, element3 ... }
int[] intArr = new int[]{5, 6, 8, 30};
Object[] objArr = new String[] {"Java", "C++"};

动态初始化
  动态初始化只指定数组的长度,由系统为每个数组元素指定初始值。

int[] prices = new int[5];
Object[] books = new String[4];

  执行动态初始化时,程序员只需要指定数组的长度,即为每个数组元素指定所需的内存空间,系统将为这些数组分配初始值。
  现在我们回答上面的问题。那我们能不能只申请内存空间而不进行初始化?大家想下这个问题。
  答案是不行,一旦为数组的每个数组元素分配了内存空间,每个内存空间里存储的内容就是数组元素的值。即使这个内存空间存储的内容是空,这个空也是一个null值。初始值的获得有两种形式:一是系统自动分配,二是由程序员指定。

使用数组

  数组中最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。此外,Java语言的数组索引都是从0开始的。

Object[] arr = new Object[2];
arr[0] = "hello";
arr[1] = "world";
foreach循环

  使用foreach遍历数组和集合时,无需获得数组和集合的元素长度,foreach循环自动遍历数组和集合中的每个元素。

package Chapter04;

public class ForEachTest {
    public static void main(String[] args) {
        String[] books ={"Java","Spring","C++"};
        for(String book : books)
            System.out.println(book);
    }
}
//Java
//Spring
//C++

深入数组

  数组是一种引用数据类型,数组引用变量是一个引用,数组元素和数组变量在内存里是分开存放的。

内存中的数组

  实际的数组对象被分配在堆(heap)内存中;如果引用该数组对象的数组引用是一个局部变量,那么它被存储在栈内存中。
在这里插入图片描述
  当一个方法执行的时候,每个方法都会创建自己的内存栈,在这个方法中定义的局部变量将会逐个放入这个栈内存中。当方法执行结束的时候,这个方法栈中的内存将自然销毁。而程序中创建一个对象的时候,这个对象是保存到运行时的数据区中,以便反复利用,这个数据区就是堆内存,当没有任何引用指向该对象的时候,由系统的垃圾回收器销毁。

package Chapter04;

public class ArrayInRam {
    public static void main(String[] args) {
        int[] a={5,7,20};
        int[] b=new int[4];

        System.out.println("数组b的长度"+b.length);
        b=a;
        System.out.printf("数组b的长度"+b.length);
    }
    /**
     * 输出:
     * 数组b的长度4
     * 数组b的长度3
     */
}

  定义并初始化后。
在这里插入图片描述
  让b引用指向a引用所指向数组后的示意图
在这里插入图片描述

多维数组

  Java语言中提供了多维数组的语言,但是其实Java中并没有真正的多维数组,其实多维数组是引用的引用。Java语言中的数组类型是引用类型,所以所有的数组变量其实是一个引用。下面定义一个二维数组的语言。

type[][] arrName;

  Java语言采用上面的语法格式来定义二维数组,但它的实质还是一维数组,只是它的数组元素变成对数组的引用。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值