java二维数组两种初始化方法 您所在的位置:网站首页 java二维数组的行数和列数的区别 java二维数组两种初始化方法

java二维数组两种初始化方法

2024-07-09 21:27| 来源: 网络整理| 查看: 265

写这篇博客的原因是因为从大一学习c语言开始 就对二维数组的声明 和初始化 一直没有搞懂。。。。直到学到了Java依旧搞得不是很清楚。

先看一道Java的基础题

这道题 错误的选项 是 B.

二维数组的初始化的两种方式

看了很多网上的博客,大部分都说是三种初始化的方式,我这里将其归为两种,有不同想法的小伙伴可以留言讨论。

什么是二维数组:

数组是一个容器,用来存储数据的。现在数组中存储的不再是int,double..的类型了,而是存储的数组。

数组中的元素还是数组,我们把它称之为数组中的数组,也就做二维数组。维度增加了一层。

简单的来说二维数组  就是元素为一维数组的数组。

 

二维数组的第一种初始化方式(静态初始化):

静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度

*1-1 int k[][] = {{},{},{},{}}; int a[][] = {{1,2,3},{4,5,6},{7,8,9,10}}; int b[][] = {{},{2},{},{3,5}}; 直接赋值,二维数组k内层的每一组大括号就是一个一维数组。有几对大括号那么k数组就有几个一维数组 例如二维数组a 中 有三个一维数组,第一个与第二个一维数组中数组长度为3  第三个一维数组长度为4 可以尝试输出其中具体某个一位数组的长度  System.out.println(a[1].length); //3 System.out.println(b[2].length); //0 二维数组的第二种初始化方式(动态初始化):

动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。 

第二种初始化方式 int [][]k = new int[i][j]; *2-1 int [][]m = new int[3][]; *2-2 int [][]n = new int[3][2]; 第二种初始化方式 对于二维数组k来说   i这个位置必须赋值,而j 这个位置 可以赋值 也可以空着不赋值。 所以就导致了2-1  与2-2  这两种不同的赋值方式。 文章后面会从内存分配的角度来赘述这2-1与2-2的区别

 

 

深入数组 

(一)定义:  1、数组是编程语言中最常见的一种数据结构,可用于存储多个数据。  Java的数组要求所有的数组元素具有相同的数据类型。

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

(二)初始化

1、静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。

2、动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

指定初始值时,系统按如下规则分配初始值:

类型 初始值 byte、short、int、long 0 float、double 0.0 char ‘\u0000’ boolean false 类、接口、数组 null (三)数组在内存中存储

1. 静态初始化的存储方式

int [][]a = {{},{},{}};

 

 

 

int a[][] = {{1,2},{3,4,5},{}};

 

 

2.动态初始化的存储方式

*2-1

*2-1 int [][]a = new int[3][]; 该代码定义了一个变量为a的二维数组,这个数组变量指向了一个长度为3的的数组, 这个数组中每个元素都是一个int类型的数组,所以默认值为null

 

 

 

 *2-2

*2-2 int [][]a = new int[3][2]; 该代码定义了一个a数组变量,这个数组变量指向一个长度为3的数组, 这个数组的元素又是一个数组类型,它们各指向对应长度为2的int[]数组, 每个数组元素的值为0。

以上分析的代码验证如下

public class TestArray { public static void main(String[] args) { System.out.println("**********验证 静态初始化 二维数组*****************"); int a[][] = {{},{},{}}; System.out.println(a); System.out.println(a[0]); System.out.println(a[1]); System.out.println(a[2]); for (int[] is : a) { for (int is2 : is) { System.out.print(is2 + " "); } System.out.println(""); } //System.out.println(a[0][0]); //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 System.out.println("--------------------"); int b[][] = {{1,2},{},{3,4,5}}; System.out.println(b); System.out.println(b[0]); System.out.println(b[1]); System.out.println(b[2]); for (int[] is : b) { for (int is2 : is) { System.out.print(is2 + " "); } System.out.println(""); } System.out.println("**********验证 动态初始化 二维数组*****************\""); System.out.println("**********2-1***********"); int c[][] = new int[3][]; System.out.println(c); System.out.println(c[0]); System.out.println(c[1]); System.out.println(c[2]); //Exception in thread "main" java.lang.NullPointerException // for (int[] is : c) { // for (int is2 : is) { // System.out.print(is2 + " "); // } // System.out.println(""); // } System.out.println("**********2-2***********"); int d[][] = new int[3][2]; System.out.println(d); System.out.println(d[0]); System.out.println(d[1]); System.out.println(d[2]); for (int[] is : d) { for (int is2 : is) { System.out.print(is2 + " "); } System.out.println(""); } } }

输出结果如下 

**********验证 静态初始化 二维数组***************** [[I@15db9742 [I@6d06d69c [I@7852e922 [I@4e25154f -------------------- [[I@70dea4e [I@5c647e05 [I@33909752 [I@55f96302 1 2 3 4 5 **********验证 动态初始化 二维数组*****************" **********2-1*********** [[I@3d4eac69 null null null **********2-2*********** [[I@42a57993 [I@75b84c92 [I@6bc7c054 [I@232204a1 0 0 0 0 0 0

 

https://blog.csdn.net/lxf512666/article/details/52819906

https://blog.csdn.net/qijingwang/article/details/83620602



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有