写这篇博客的原因是因为从大一学习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 0float、double    0.0char    ‘\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: 0System.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

java二维数组两种初始化方法相关推荐

  1. java二维数组三种初始化方法(实例)

    初始化方法: 1.使用大括号直接赋值,适合已经确定知道数组元素的情况 2.给定二维数组的大小 3.数组第二维的长度可变化,未改变 代码举例如下: public class NewArray {publ ...

  2. java二维数组的赋值_java二维数组三种初始化方法(实例)

    初始化方法: 1.使用大括号直接赋值,适合已经确定知道数组元素的情况 2.给定二维数组的大小 3.数组第二维的长度可变化,未改变 代码举例如下: public class NewArray { pub ...

  3. Java二维数组声明与初始化

    package 调度算法;public class Diaodu {public static void main(String[] args) {String name[][]= {{"进 ...

  4. java二维数组的常见初始化

    public class Test{public static void main(String[] args){//第一种://int[][] arr1 = new int[][]{{1,2}, { ...

  5. java二维数组两个框代表什么_在java语言中,二维数组的两个中括号[][]分别表示()和()。...

    [判断题]一元统计分析是研究一个随机变量统计规律的学科. [判断题]合伙创业的成功率一般低于独资创业的成功率. [单选题]镜检时呈"竹节状"排列的是 [判断题]酵母菌的菌落与放线菌 ...

  6. java二维数组杨辉三角_实验----Java的二维数组的应用及杨辉三角的编写

    (1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...

  7. java二维数组怎么看_java、二维数组详解!

    /* java 二维数组的概念 使用方法! 1.什么是二维数组? 答案:数组的数组! 他的每一个元素都是数组!二维数组是(存储一维数组的)一维数组. 2.如何定义?(以二维数组为列) int arr[ ...

  8. js二维数组定义和初始化的三种方法

    方法一:直接定义并且初始化,这种遇到数量少的情况可以用 var _TheArray = [["0-1","0-2"],["1-1",&quo ...

  9. java二维数组初始化值_Java二维数组初始化的方法

    对于一个新使用的工具,我们会进行初步的初始化工具,目的是为了加上一些使用的配置.在学过了一维数组后,那么二维数组是加了一层维度的一维数组.在初始化方面,二维数组有三种方法,相信很多人只是掌握了其中的一 ...

最新文章

  1. python两个集合的交集 合集 差集
  2. Egret之龙骨卡槽(slot)换皮
  3. 电路的静态与动态特性
  4. python接口测试-认识GET请求
  5. CXF配置,ant文件说明及运行,运行cxf中带的项目
  6. FastJson简单应用
  7. 图片向上滚动字幕代码html,如何通过制作滚动字幕的软件实现这种片尾的向上滚动字幕效果...
  8. android 文件选择器_Android 开发 打开系统文件、图片、视频等 实现单选多选功能...
  9. python面向对象基础语言进阶
  10. 合成孔径雷达算法与实现_[SAR笔记0]合成孔径雷达成像算法与实现
  11. python 多进程 内存增长_python 多进程 内存 copy-on-write
  12. centos虚拟机复制后网络重启出错解决
  13. 注意细节:Javascript中的变量作用域
  14. 一个rsync自动备份并发信通知的shell脚本
  15. Atitit 互联网行业如何提升收入 经济学概论读后感 attilax总结 1. 收入“四 位一体”的理论(工资、利润、利息、地租) 1 2. 提升收入,就要提升这4个象限的收入 1 3. 如
  16. CC2530串口通讯的实现
  17. 如何导出久其报表所有数据_久其报表不能传输怎么办?
  18. Cisco Packet Tracer 思科模拟器中路由器的DHCP配置
  19. Windows下9001端口被占用
  20. 数据库——T-SQL方式创建数据库

热门文章

  1. 为Arduino IDE安装添加库
  2. 【Python爬虫系列】浅尝一下爬虫40例实战教程+源代码【基础+进阶】
  3. 乘势5G 车联网规模商用已见曙光。
  4. 2017-2042美国国防部无人系统路线图
  5. 做一名计算机老师应具备的素质,浅谈计算机教师应具备的素质
  6. ES6学习笔记:箭头函数
  7. O2OA RCE 远程命令执行漏洞复现(CVE-2022-22916)
  8. 职业梦想是计算机的英语作文,我梦想的职业高中英语作文
  9. 使用schrodinger建立深度学习QSAR模型
  10. java接口 运动员,JAVA面向对象进阶实例【教练和运动员日常安排】