Java中关于数组要说的那些点

1. 初识数组

- 什么是数组

Java中的数组和c语言中的数组还是有一定的区别的;

数组本质上就是让我们能“批量”创建相同类型的变量,
!!在Java中,数组中包含的变量必须是相同类型。

和c语言中一样,数组是连续存放的

- 数组的创建和初始化

单纯的定义一个数组

数据类型 [ ] 数组名称 = new 数据类型 [ 初始化的数据个数 ];

动态初始化

数据类型 [ ] 数组名称 = new 数据类型 [ ] { 初始化数据 };

静态初始化

数据类型 [ ] 数组名称 = { 初始化数据 };

int[] arr1 = new int [10];   //单纯的定义一个数组

int[] arr2 = new int[] {6,8,9};  //动态初始化

int[] arr3 = {66,88,12};     //静态初始化

要注意的是,在动态初始化和单纯的定义一个数组时,其中的 new 是产生了一个新的对象,在静态初始化中虽然没有 new 出现,但是同样也产生了对象。

---------------------------------------------------------------------------------------------------

了解了数组的创建和初始化,下面我们康康数组是怎么使用的吧。

- 数组的使用

1.数组的访问

和c语言一样,我们也可以使用下标去访问一个数组

int[] array = {1,2,3,4,5,6,7,88};

System.out.println(array[2]);
array[2] = 66;
System.out.println(array[2]);
System.out.println(array[6]);

编译结果:
在这里插入图片描述
但是在使用下标一定要注意不可以使下标越界,否则会出现数组越界的异常;
!!!下标是从0开始算起的

给大家看一个数组越界异常的例子

int[] array = {1,2,3,4,5,6,7,88};

System.out.println(array[10]);

在这里插入图片描述
所以,使用数组时一定要谨防下标越界!!

下面给大家看一个错误的代码,它也属于数组越界异常的一种。

int[] array = {};

System.out.println(array[0]);

在这里插入图片描述
想必大家很好奇这个为什么也会有数组越界的异常吧。

这是因为我们在定义和初始化数组时没有给其长度,其默认长度为0,
所以在访问 array[0] 时就有数组越界的异常啦。

2.数组的长度

在使用数组时,我们几乎每次都要使用数组的长度,Java中求数组长度和c还是有一定区别,并且比c语言方便很多。

使用 数组名.length 便可以获取到数组的长度
. 为成员访问操作符

int[] array = {1,2,3,4,5,6,7,88};
			 
System.out.println(array.length);

在这里插入图片描述
同样数组的长度还可用来在for循环中作为控制变量的大小

int[] array = {1,2,3,4,5,6,7,88};
			 
for(int i = 0;i< array.length;i++) {
				 
	System.out.println(array[i] + " ");
}

在这里插入图片描述

 int[] arr = null;
        
 System.out.println(arr.length);

在这里插入图片描述
这是一种空指针的异常

3.数组的打印

打印数组有三种方法,分别是:

  • for 循环的遍历
int[] array = {1, 2, 3, 4, 5, 6};

for (int i = 0; i < array.length; i++) {
	 System.out.print(array[i] + " ");
}

在这里插入图片描述

  • for - each
int[] array = {1, 2, 3, 4, 5, 6};

for (int x: array) {
   System.out.println(x);
}

在这里插入图片描述
到这肯定有人好奇 for 循环和 for - each 的区别是什么

for 循环是用下标进行打印的

for - each 则不需要下标便可以打印,其中 x 代表的是数组中的元素,它是for 循环的另外一种使用方式,能够更方便的完成对数组的遍历,可以避免循环条件和更新语句写错。

  • Arrays.toString(用字符串的形式打印)
int[] array = {1, 2, 3, 4, 5, 6};

System.out.println(Arrays.toString(array));

在这里插入图片描述
Arrays 是操作数组的工具类,
在使用的时候要导入import java.util.Arrays包

2.数组作为方法的参数

我们以一个数组的打印方法为例

public static void printArr(int[] arr) {

	for (int i = 0; i < arr.length; i++) {
            
      	System.out.print(arr[i]+" ");
 	}
 }
public static void main(String[] args) {

	int[] array = {1, 2, 3, 4, 5, 6};
	printArr(array);
}

在这里插入图片描述
int[ ] array 是函数实参
int[ ] arr 是形参
在方法体内,如需获取到数组长度,同样可以使用 数组名.length来获取

3.数组作为方法的返回值

我们以一个将数组扩大二倍的方法为例

 public static int[] transform(int[] arr) {
        int[] a = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            a[i]  = 2*arr[i];
        }
        return a;
    }
 public static void main(String[] args) {

        int[] array = {1,3,5,7,9};
        int[] ret = transform(array);
        System.out.println(Arrays.toString(ret));
     }

在这里插入图片描述
在这个方法中,我们的参数是一个数组,返回值也是一个数组,其实通过这个返回值带回来的是 a 这个数组的引用,里面放的是哈希码
引用其实是就像是c语言中的一个低配版的指针,主要内容我会在之后的博客中提到

4.二维数组

二维数组的本质也就是一维数组,只不过每个元素又是一个一维数组。和c语言中的二维数组是很相似的

-二维数组的创建和初始化

1. 规则数组

int[][] array = {{1,2,3},{4,5,6}} ;
int[][] array1 = new int[][]{{1,3,5},{2,4,6}};
int[][] array2 = new int[2][3];

System.out.println(Arrays.deepToString(array));
System.out.println(Arrays.deepToString(array1));
System.out.println(Arrays.deepToString(array2));

在这里插入图片描述
其中Array.deepToString(数组名)是用来打印二维数组的。

2.不规则数组

int[][] array3 = new int[2][];
int[][] array4 = {{1,2},{4,5,6}};

 	for (int i = 0; i < array4.length; i++) {

            for (int j = 0; j < array4[i].length; j++) {

                System.out.print(array4[i][j]+" ");
            }
            System.out.println();
        }

在这里插入图片描述
在不规则数组打印时,一定要注意每行元素的个数的循环范围

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值