Java数组的初始化大小_对Java接口实现的建议

Java数组的初始化大小_对Java接口实现的建议**二维数组:**元素是一维数组的数组。格式一:publicclassArrayDemo{publicstaticvoidmain(String[]args){//格式一int[][]arr=newint[3][2];System.out.println(arr);//[[I@1b6d3586System.out.println(arr[0]);//[I@4554617c

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1 一维数组初始化

public class ArrayDemo1 { 
   
    public static void main(String[] args) { 
   
        // 格式一(动态初始化)
        int[] arr1 = new int[3]; // 数组的长度(这里为3)必须指定
        
        // 格式二(静态初始化)
        int[] arr2 = new int[]{ 
   1, 2, 3}; // 这里数组长度不能指定,花括号里面的元素个数就是数组长度
        // 或者按照下面的简写形式
        int[] arr3 = { 
   1, 2, 3}; // 格式二的简写形式
    }
}

内存图分析略。

2 二维数组初始化

public class ArrayDemo2 { 
   
    public static void main(String[] args) { 
   
        // 格式一(动态初始化)
        /*int[][] arr = new int[3][2]; System.out.println(arr); // [[I@1b6d3586 System.out.println(arr[0]); // [I@4554617c System.out.println(arr[1]); // [I@74a14482 System.out.println(arr[2]); // [I@1540e19d System.out.println(arr[1][0]); // 0 System.out.println(arr[2][1]); // 0 System.out.println("------------------------"); arr[1][0] = 3; arr[2][1] = 4; System.out.println(arr); // [[I@1b6d3586 System.out.println(arr[0]); // [I@4554617c System.out.println(arr[1]); // [I@74a14482 System.out.println(arr[2]); // [I@1540e19d System.out.println(arr[1][0]); // 3 System.out.println(arr[2][1]); // 4*/

        // 格式二(动态初始化)
        /*int[][] arr = new int[3][]; System.out.println(arr); // [[I@1b6d3586 System.out.println(arr[0]); // null System.out.println(arr[1]); // null System.out.println(arr[2]); // null // 打印arr相同,都是地址;但是对于arr[0] arr[1] arr[2]结果都是null,因为列的维度没有指定,不知道如何分配内存。 // System.out.println(arr[0][0]); // NullPointerException System.out.println("------------------------"); // arr[1] = {1, 2, 3}; // 报错 arr[1] = new int[]{1, 2, 3}; arr[2] = new int[]{10, 20}; System.out.println(arr[0]); // null System.out.println(arr[1]); // [I@4554617c System.out.println(arr[2]); // [I@74a14482 System.out.println(arr[1][0]); // 1 System.out.println(arr[2][1]); // 20 // 总结:格式二需要new两次,并且Java中二维数组每行元素的个数可以不相同(和C/C++不同)。*/

        // 格式三(静态初始化)
        // int[][] arr = new int[][]{ 
   {1, 2, 3}, {4, 5}, {6}}; // 此时行、列维度都不能指定
        // int[][] arr = new int[2][]{ 
   {1, 2, 3}, {4, 5}}; // 报错
        // int[][] arr = new int[][3]{ 
   {1, 2, 3}, {4, 5}}; // 报错

        int[][] arr = { 
   { 
   1, 2, 3}, { 
   4, 5}, { 
   6}}; // 格式三的简化形式
        System.out.println(arr); // [[I@1b6d3586
        System.out.println(arr[0]); // [I@4554617c
        System.out.println(arr[1]); // [I@74a14482
        System.out.println(arr[2]); // [I@1540e19d
        System.out.println(arr[1][0]); // 4
        // System.out.println(arr[2][1]); // ArrayIndexOutOfBoundsException
    }
}

格式一内存图分析:

二维数组格式1

格式二内存图分析:

二维数组格式2

格式三内存图分析:

二维数组格式3

总结:数组初始化分为静态初始化动态初始化,一维数组和二维数组的静态初始化类似;对于动态初始化,一维数组只有一种形式,且必须指定数组的长度,二维数组有两种形式,且必须指定数组的行,列可以不用指定(这种情况要new两次)。


结束语:如果本篇博客对您有帮助,请点赞、收藏或关注,您的鼓励是博主进步的动力,感谢支持,共同进步。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184301.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月9日 上午6:36
下一篇 2022年10月9日 上午6:36


相关推荐

  • 盘点python工具包并优化pip下载加速

    盘点python工具包并优化pip下载加速1、优化pip下载加速2、vscode使用安装环境python3、python相关工具包与方法3.1、Bilibili.com(B站)数据下载工具包开源地址:https://github.com/wolfbolin/BiliUtil安装命令:pipinstallBi

    2022年7月14日
    29
  • java volatile详解

    java volatile详解本篇来自java并发编程实战关于volatile的总结。要说volatile,先得明白内存可见性。那我们就从内存可见性说起。一、内存可见性可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。在单线程环境中,如果向某个变量先写入值,然后在没有其他写入操作的情况下读取这个变量,那么总能得到相同的值。这看起来很自然。然而,当读操作和写操作在不同的线程中执行时,情况却并非如此,这听

    2022年7月18日
    22
  • 美团面试官问我: ZGC 的 Z 是什么意思

    美团面试官问我: ZGC 的 Z 是什么意思

    2020年11月20日
    252
  • 线程的中断 interupt[转]

    线程的中断 interupt[转]不客气地说 至少有一半人认为 线程的 中断 就是让线程停止 如果你也这么认为 那你对多线程编程还没有入门 在 java 中 线程的中断 interrupt 只是改变了线程的中断状态 至于这个中断状态改变后带来的结果 那是无法确定的 有时它更是让停止中的线程继续执行的唯一手段 不但不是让线程停止运行 反而是继续执行线程的手段 对于执行一般逻辑的线程 如果调用调用它的 int

    2026年3月17日
    2
  • PEB断链

    PEB断链断链这种技术非常古老 同时应用于非常多的场景 在内核层如果我们需要隐藏一个进程的内核结构体 也会使用这种技术 本文基于 PEB 断链在用户层和内核层分别进行实现 在用户层达到的效果主要是 dll 模块的隐藏 在内核层达到的效果主要是进程的隐藏 3 环 PEB 断链每个线程都有一个 TEB 结构来存储线程的一些属性结构 TEB 的地址用 fs 0 来获取 在 0x30 这个地址有一个指针指向 PEB 结构然后定位到 PEB PEB 就是进程用来记录自己信息的一个结构 在 PEB 的 0x00c 偏移有一个 Ldr PEB LDR DAT

    2026年3月17日
    2
  • c# taskscheduler使用场合_hbase shell put

    c# taskscheduler使用场合_hbase shell put这里记录下TaskScheduler的简单用法。使用场景:在使用Task的时候,大家都知道用TaskFactory.StartNew可以用来创建一个Task。这里如果创建10个,那么这10个Task就各自放飞直接运行了。一般情况下是没什么大问题,如果这10个中的每个Task非常耗CPU或者内存,而公司的产品又是非常考验配置成本(比如一体机,移动设备等),就需要让这10个Task按照一定要求执行,比如串行执行,从而节省资源、让机器还可以顺畅去干别的事情。Task…

    2022年10月11日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号