0

0

Java归纳总结之数组详解

WBOY

WBOY

发布时间:2022-04-25 16:08:22

|

2138人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于数组的相关问题,包括了命名规则、自动类型推断、静态动态初始化、多维数组的其他写法、常见错误写法等等内容,下面一起来看一下,希望对大家有帮助。

Java归纳总结之数组详解

推荐学习:《java视频教程

索引:命名规则、自动类型推断、静态动态初始化、多维数组的其他写法、常见错误写法、数组下标越界、默认值问题、数组长度问题、数组内存解析

正确写法:

1.步骤分类:(以下int可以替换为char String double等等)
        ①一步写法:

立即学习Java免费学习笔记(深入)”;

int [] ids = new int []{1001,1002,1003};// 声明+初始化

int ids [] = new int []{1001,1002,1003}; // [ ]位置有两种放法


int ids [] = {1001,1002,1003};//自动类型推断,new int []可省


/**********错误示范***错误示范***错误示范***错误示范************/

int ids [] = new [] int{1001,1002,1003};//只有定义时的[]可以乱动

       自动类型推断:仅在一步写法中适用,可以省略=右边的new int [ ]

         ②两步写法:

int ids [] ;   //声明

ids = new int [ ] {1001,1002,1003} ;   //初始化

/**********错误示范***错误示范***错误示范***错误示范************/

int ids [];
ids [] = new int {1001,1002,1003};//分两步时,左边不加[]


int ids [];
ids = {1001,1002,1003};//分两步时,没有类型推断

2.状态分类:静态动态必须二选一,给长度不加{},给{}不加长度

        ①静态初始化:

两个[ ]均为空
String [] name = new String [] {"张三","李四"} ;
//也可写为String [] name = {"张三","李四"};

        ②动态初始化:

后面的[ ]必须带数字规定长度,并且不能{}赋值

String [ ] name ;
name = new String [2] ;
//可以合为一步写String name [] = new String [2];

/**********错误示范****错误示范****错误示范********/
int ids [3][4] = XXXXXXXXX;
int ids [3][ ] = XXXXXXXXX;
int ids [ ][4] = XXXXXXXXX;

多维数组

int arr1 [][] =XXXXXXXXXXX;
int [] arr2 []=XXXXXXXXXXX;
int [][] arr3 =XXXXXXXXXXX;
//都是正确写法
Java主张 int [] arr = new int []{}; 写法



//多维数组同理
int [] arr[][] =XXXXXXXX;
int [][] arr[] =XXXXXXXX;
随便瞎基8放都是正确的
Java主张 int [][] arr = new int [][]{};写法

不过我个人不习惯。。。
int arr0 [][] = {{1,2},{3,4},{5,6}};//正确:静态、自动类型推断
int arr1 [][] = new int [3][2];
int arr2 [][] = new int [3][ ];//正确:动态、可省列数[]
int arr3 [][][] = new int [3][ ][ ];//正确:动态、可省后两个[]

 默认值问题:动态[i][j]有默认值,静态{}没有默认值(末尾详解)

int arr0 [][] = new int [2][2];//动态初始化,分配内存
//数组内的4个成员全部默认为0,编译运行都不会报错


int arr0 [][] = new int [][]{ {1,2},{3} };
//静态初始化,编译能通过,arr0[1][1]没有默认值(未分配空间)
//编译能通过,运行到arr[1][1]会报错



int arr0[][] = new int [3][] ;
// 输出arr0[3][0]  arr0[3][1]  arr0[3][2]  arr0[3][3].......
//都会报错

 报错案例:

数组下标越界:arr[1][1]在静态初始化的时候没有给值,所以没有分配内存空间,编译能通过,但是访问的时候会报错。该静态初始化的数组范围仅限于arr[0][0]  arr[0][1]  到arr[1][0]

深入内存理解:(末尾详解)

String cod [][] = new String [3][ ];//只定义了行,列数未知
System.out.println(cod[1][1]);//未定义列,不给默认值。运行报错

正确写法:加一步 cod[1]=new String [2\3\4....];分配列内存,给定默认值null

 常见错误写法

 ① int [ ] arr1 = new int [ ] ;                        //静态忘带{}

 ② int [3] arr2 = new int [3] ;                      //前面[ ]必须空

 ③ int [ ] arr3 = new int [5] {1,2,3,4,5} ;     //动态不能带{ }

数组一旦确定(声明+初始化),长度就固定了,不能更改

数组的内存分配是连续的,系统要为数组分配一个固定的空间,如果100个空间以后被其他内容占用内存,那么数组就只能用到前99个空间,如果长度可以改变,那么arr[100]就会更改其他内容产生bug

一个例子说明数组长度问题:

二维数组遍历,两层for循环:

public class Test2 {
	public static void main(String args[]) {
	int arr[][] = { {1,2,3},{4,5,6,7},{8,9},{10}};
		
		for(int i = 0 ; i 

运行结果:

arr.length是第一维度长度

arr[i].length是第i行的第二维度长度

arr[i][j].length是第i行j列的第三维度的长度

数组内存解析:

以二维数组为例,分为内层和外层。形如arr[0] arr[1]的是外层,完整表达arr[1][2]的是内层

Lyrics Generator
Lyrics Generator

免费人工智能歌词生成器和人工智能歌曲作家

下载

一、对于一个外层arr[1]来说,它就是一个一维数组,就会分为“初始化”和“未初始化”的两种情况:

例1:

int arr1[][] = new int [3][];
System.out.println( arr1[1] );
//运行结果:null

 此时只知道外层行数,但内层没有初始化,没有分配地址,故结果为null

int arr1[][] = new int [3][5];//任意给定列数
System.out.println(arr1[1]);
//运行结果:[I@15db9742

此时内层长度确定,初始化完成,arr1[1]指向一个首地址[I@15db9742

一个 [ 表示arr[1]的内层为一维数组,I是int的首字母,@后面是地址

例2:

String arr1[][] = new String [3][5];
System.out.println(arr1);
//运行结果:[[Ljava.lang.String;@15db9742

因为完整定义了String数组,故分配了空间,arr1指向arr1[0][0]的地址(整个数组的首地址)

两个[[表示里面有二维数组,java.lang.String;是包名

例3:

float arr1[][] = new float  [3][5];
System.out.println(arr1[0]);
//结果:[F@15db9742

外层元素初始化值为:地址值

内层元素初始化值为:与一维数组初始化情况相同

一维数组初始化:

1.数组元素是整形int long short :  0

2.数组元素是浮点型float double : 0.0

3.数组元素是boolean型:false

4.数组元素是引用类型  : null

5.数组元素是char型 :0 或 '\u0000' 而非‘0’

数字0,而不是字符0,对应的ASCII码不一样

'\u0000'是Unicode码第0000号位,是一个空格符,但是不是键盘上的空格

验证如下:

經典例題:

 

解:b e可以,acdf都不行

推荐学习:《java视频教程

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

123

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

33

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

85

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

20

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

47

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.6万人学习

C# 教程
C# 教程

共94课时 | 7万人学习

Java 教程
Java 教程

共578课时 | 47.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号