JAVA中数组的基本概念与用法
JAVA中数组的基本概念与用法
1. 数组的定义与特点
- 数组的一种引用数据类型
- 数组中可以同时存放多个数据,但是数据的类型必须统一
- 数组的长度在开始时就需要确定,在程序运行期间是不可改变的
- 虽然可以使用数组的扩容机制来扩充数组的长度,但是这个方法也比较麻烦
2. 数组的初始化
数组的初始化方式有两种
- 动态初始化
- 静态初始化
动态初始化特点:
在创建数组的时候,直接指定数组当中的数据元素个数。
动态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[数组长度];
解析含义:
左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号:代表是一个数组
左侧数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧中括号的长度:也就是数组当中,到底可以保存多少个数据,是一个int数字
- 动态创建数组的示例代码:
// 数据类型[] 数组名称 = new 数据类型[数组长度];
// 定义一个int类型的数组,可以存放10个数据
int[] arrayA = new int[10]; // 给创建的数组赋值
for (int i = 0; i < 10; i ++){
arrayA[i] = i;
} // 输出数组中的值
for (int i = 0; i < 10; i ++){
System.out.print(arrayA[i]);
}
静态初始化数组
静态初始化数组的特点:
在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。
静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, ... };
注意事项:
虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度
静态初始化数组示例代码
// 数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, ... };
// 创建一个数组,一开始数组中就有1,2,3,4,5 这些值
int [] arrayA = new int[] {1, 2, 3, 4, 5,};
// 输出数组中的使用元素
for (int i = 0; i < arrayA.length; i ++){
System.out.print(arrayA[i]);
}
数组初始化的省略格式
标准格式:
数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, ... };
省略格式:
数据类型[] 数组名称 = { 元素1, 元素2, ... };
注意事项:
- 静态初始化没有直接指定长度,但是仍然会自动推算得到长度。
- 静态初始化标准格式可以拆分成为两个步骤。
- 动态初始化也可以拆分成为两个步骤。
- 静态初始化一旦使用省略格式,就不能拆分成为两个步骤了。
使用建议:
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
示例代码
// 省略格式的静态初始化
int[] arrayA = { 10, 20, 30 };
// 静态初始化的标准格式,可以拆分成为两个步骤
int[] arrayB;
arrayB = new int[] { 11, 21, 31 };
// 动态初始化也可以拆分成为两个步骤
int[] arrayC;
arrayC = new int[5];
// 静态初始化的省略格式,不能拆分成为两个步骤。(错误写法,编译器直接报错)
// int[] arrayD;
// arrayD = { 10, 20, 30 };
}
3. 获取数组中的元素
使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
如果是整数类型,那么默认为0;
如果是浮点类型,那么默认为0.0;
如果是字符类型,那么默认为'\u0000';
如果是布尔类型,那么默认为false;
如果是引用类型,那么默认为null。注意事项:
静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
对于数组而言,数组的下标是从0开始的,访问的时候需要注意。
// 创建一个数组
int[] arrayA = new int[10];
// 给数组中添加元素,数组的下标从0开始;
arrayA[0] = 1;
arrayA[1] = 2;
arrayA[2] = 3;
// 直接定义数组的名称,将输出数组在内存中经过哈希得到的地址值
System.out.println(arrayA);
// 使用Arrays中的toString()方法输出数组,
// 从得到的结果中会发现没有赋值的位置会自动使用0补齐。
System.out.println(Arrays.toString(arrayA));
// 获取数组中一个指定位置的元素值
// 例如:获取下标为0的元素值
System.out.println(arrayA[0]);
4.Java中的内存划分(图片来自网络)

5. 假设一个数组的内存图
- 栈中的变量地址指向堆中的内存地址

6. JAVA中的浅拷贝
如果在JAVA中发生了如下代码的赋值方式,那么整个就是浅拷贝,即arrayB数组修改数组中的元素值之后会影响arrayA中的数组的元素值。
int[] arrayA = new int[3];
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 0
System.out.println(arrayA[2]); // 0
System.out.println("=============="); arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 10
System.out.println(arrayA[2]); // 20
System.out.println("=============="); // 特别注意这个地方
// 将arrayA数组的地址值,赋值给arrayB数组
int[] arrayB = arrayA;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 10
System.out.println(arrayB[2]); // 20
System.out.println("=============="); arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 100
System.out.println(arrayB[2]); // 200
}
- 内存示例图

7. 数组越界的异常信息
示例代码
// 数据类型[] 数组名称 = new 数据类型[数组长度];
// 定义一个int类型的数组,可以存放10个数据
int[] arrayA = new int[10];
// 给创建的数组赋值
for (int i = 0; i < 10; i ++){
arrayA[i] = i;
}
// 想要定义下标为10的对应元素值,但是数组的最大长度只是9,
// 因为数组的下标是从0开始的,虽然在编译器不会报错,
// 但是在运行期会直接抛出数组越界异常信息。
System.out.println(arrayA[10]);
- 异常信息截图

- 异常信息截图
8. 数组中的空指针异常
int[] arrayA = null;
System.out.println(arrayA[0]);

9. 获取数组的长度
// 数据类型[] 数组名称 = new 数据类型[数组长度];
// 定义一个int类型的数组,可以存放10个数据
int[] arrayA = new int[10];
// length可以获取数组的长度
System.out.println(arrayA.length);
JAVA中数组的基本概念与用法的更多相关文章
- JAVA中数组Arrays类的常见用法
import java.util.Arrays; int[] array1={7,8,3,2,12,6,5,4}; 1. //克隆clone int[] array2=array1.clone() ...
- Java中数组的特性
转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...
- Java 中数组的内存分配
Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...
- Android中Cursor类的概念和用法[转]
首页 > 程序开发 > 移动开发 > Android > 正文 Android中Cursor类的概念和用法 2011-09-07 0个评论 收藏 ...
- Java中数组在内存中的存放原理?
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyong0717/article/details/79165685Java中数组被实现为对象, ...
- java中数组的相关知识
1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...
- 在java 中,数组与 List<T> 类型的相互转换
在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...
- Java中数组的初始化方式
Java中数组的初始化方式 初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...
- JAVA中的break[标签]continue[标签]用法
原文:JAVA中的break[标签]continue[标签]用法 注意:JAVA中的标签必须放在循环之前,且中间不能有其他语句.例如:tag:for或while或do--while; 1.使用brea ...
随机推荐
- 单片机stm32F103单片机晶振不起振的原因分析
这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题.下面是我在遇到问题后的一些检查,排除问题的过程.本人小菜鸟一个,文章中如有错误和不足,还望各位大 ...
- 疯狂Java基础Day1
--每过一遍基础,都是一次提升! 太多遗忘了,慢慢补... 推一个Java学习教程--->b站搜:狂神说Java系列(排序完毕) 推荐原因:讲的不错,会涉及到底层,也会讲讲面试. 一.注释 主要 ...
- 对dy和Δy的浅薄理解
一.导数定义 当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x0)或df(x0) ...
- 清除行列 牛客网 程序员面试金典 C++ Python
清除行列 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零. 给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的 ...
- Linux&C网络编程————“聊天室”
从上周到现在一直在完成最后的项目,自己的聊天室,所以博客就没怎么跟了,今天晚上自己的聊天室基本实现,让学长检查了,也有好些bug,自己还算满意,主要实现的功能有: 登录注册 附近的人(服务器端全部在线 ...
- centos redhat 安装g++
正确安装命令 : yum install gcc-c++ libstdc++-devel 安装后可以在/bin/找到
- JMeter源码导入到Intellij IDEA (八)
亲测:jmeter源码导入Intellij IDEA,导入,编译,运行! 一.环境:windows10操作系统,jdk1.8,Intellij IDEA 2018.3,jmeter5.0 下载jmet ...
- SQL注入之猫舍之sqlmap的使用
先说一下最常用的基础指令 -u 指定注入点(一般为url栏的网址) --dbs 跑库名 --tables 跑表名 --columns 跑字段名 --dump 枚举数据(高危指令,容易进去) -D 库名 ...
- 庆祝dotnet6,fastgithub送给你
前言 dotnet6正式发布了,fastgithub是使用dotnet开发的一款github加速器,作为开发者,无人不知github,作为github用户,fastgithub也许是你不可或缺的本机工 ...
- 一看就懂的IdentityServer4认证授权设计方案
查阅了大多数相关资料,总结设计一个IdentityServer4认证授权方案,我们先看理论,后设计方案. 1.快速理解认证授权 我们先看一下网站发起QQ认证授权,授权通过后获取用户头像,昵称的流程. ...