Java——数组的定义与使用
数组的定义与使用
1.数组的基本概念
(1)数组的动态初始化:
数组首先先开辟内存空间,而后再使用索引进行内容的设置,这种定义数组的方式称为动态初始化
数组是引用数据类型,存在有内存分配问题。在使用前一定要开辟空间(实例化),否则就会产生NullPoninterException
|
数组的动态初始化(声明并开辟数组) 数据类型[ ] 数组名 = new 数据类型[数组长度] |
数组的分步初始化: 数据类型[ ] 数组名 = null; 数组名 = new 数据类型[数组长度] |
当数组开辟空间之后,就可以采用如下方式对数组进行操作:
1.数组可以通过索引完成,即“数组名[索引]”;
注意:数组索引从0开始,所以索引的范围为:0——(数组长度-1)如果访问的值超过数组长度,会产生 “java.lang.ArrayIndexOutOfBoundsException”异常。
2.当数组动态初始化开辟空间后,数组中每个元素都是该数据类型的默认值。
3.数组是一个有序的集合操作,所以对于数组的内容操作往往采用循环操作(for循环)。
4.Java中可采用 数组名.length 来获取数组长度。
|
public class Test7 { public static void main(String[] args){ int[] demon = new int[4];//开辟一个长度为10的整型数组 System.out.println(demon.length);//求数组的长度 demon[0] = 0;//数组的第一个元素 demon[1] = 1; demon[2] = 2; for(int i = 0;i < demon.length;i++){ System.out.print(" "); System.out.print(demon[i]);//打印数组的元素 } } } |
|
运次结果:10 0 1 2 0 |
(2)数组的动态初始化:
数组在定义的同时可以设置内容,则称为数组的静态初始化。
|
数据类型[] 数组名 = {值1……} |
数据类型[] 数组名 = new 数据类型[] {值……}(推荐使用) |
|
public class Test7 { //数组静态初始化(简化格式) public static void main(String[] args){ int[] demon1 ={2,3,5,6,9,11}; System.out.println(demon1.length); for(int i = 0;i < demon1.length;i++){ System.out.println(demon1[i]); } } } |
|
运行结果:6 2 3 5 6 9 |
|
public class Test7 { //数组静态初始化(完成格式)**推荐使用 public static void main(String[] args){ System.out.println(new int[]{1,2,3,4,5}.length);//匿名数组 } } |
|
运行结果:5 |
2.数组的引用传递
数组作为引用数据类型,也一定存在引用传递。
|
public class Test7 { public static void main(String[] args) { int[] demon = null ; demon = new int[4] ; demon[0] = 0 ; // 数组第一个元素 demon[1] = 1 ; // 数组第二个元素 demon[2] = 2 ; // 数组第三个元素 for (int i = 0; i<demon.length ; i++) { System.out.println(demon[i]) ; // 通过循环控制索引下标更改 } } } |
通过上述例子,我们来探讨内存分配的问题:
引用传递空间:同一块堆内存可被多个栈内存所指向。如下例:内存分析见下。
|
public class Test7 { public static void main(String[] args) { int[] demon = new int[4] ; int[] temp = null; System.out.println(demon.length); demon[0] = 0 ; // 数组第一个元素 demon[1] = 1 ; // 数组第二个元素 demon[2] = 2 ; // 数组第三个元素 for (int i = 0; i<demon.length ; i++) { System.out.println(demon[i]) ; // 通过循环控制索引下标更改 } temp = demon; temp[0] = 20; System.out.println(demon[0]); } } |
|
运行结果:4 0 1 2 0 20 |
内存分析图:
数组最大的缺陷:长度固定。
3.二维数组
二维数组(数组的数组):二维数组本质上指的就是一个行列的集合。换言之,如果要获得一个数据,既需要行索引,也需要列索引。
要获取二维数组中的元素:数组名[行索引][列索引]
二维数组的初始化:
|
动态初始化: 数据类型[][] 数组名 = new 数据类型[行个数][列个数] |
静态初始化: 数据类型[][] 数组名 = new 数据类型[][]{{值……},……{值……}} |
|
public class Test7 { //二维数组 //数组并不是等列数组 public static void main(String[] args){ int[][] demon3 = new int[][]{{1,3},{5,7,9},{2,4}}; //打印二维数组要使用双重循环 for(int i = 0;i< demon3.length;i++){ for(int j =0;j<demon3[i].length;j++){ System.out.print(demon3[i][j]+" "); } } } } 4.数组和方法的互操作数组是引用数据类型,所有引用数据类型都可以为其设置多个栈内存所指向;所以在进行对数组的操作时,可以通过其他方式处理。 (1)方法接收数组 (2)方法返回数组 (3)方法修改数组
内存分析图如下: 5.Java对数组的支持1.对数组进行排序: 只要是基本数据类型的数组,sort方法都可以进行排序处理(升序处理)。 数组排序 : java.util.Arrays.sort(数组名称)
2.实现数组的拷贝: 数组拷贝:指的是将一个数组的部分内容替换掉另一个数组的部分内容(必须是连续的)。 System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度)
6.数组案例给出以下数组,要求可以统计出该数组的最大值、最小值、平均值、总和。
(1)简单的实现方法实现
由上述代码可以看出:主函数中代码量大,代码比较凌乱;主方法相当于客户端调用,代码应越简单越越好。 (2)使用方法与数组互操作实现
使用如上方式使得逻辑比较清晰,主函数中代码量减少。 7.对象数组可以看出前面所定义的都是基本数组,对象数组往往是以引用数据类型为主的定义;对象数组中保存的内容要比普通类型多;如:接口、类。 (1)对象数组的动态初始化
(2)对象数组的静态初始化
|
|||||||||||||||||||||||||||||||||
|
运行结果:1 3 5 7 9 2 4 |
Java——数组的定义与使用的更多相关文章
- JAVA数组的定义及用法
数组是有序数据的集合,数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素. 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; ...
- java 数组声明定义 数组内存分配 数组初始化 数组引用 数组的遍历
一,数组的定义 Java 中定义数组的语法有两种: 1. type arrayName[]; 2. type[] arrayName;type 为Java中的任意数据类型,包括基本类型和组合类型,ar ...
- Java数组的定义和使用
如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java ...
- 10、Java 数组的定义和使用
1.数组的定义 首先举一个小例自:如果你现在需要定义100个int类型的变量,那么按照前俩节的做法为: int a = 1, b=2 , c=3.......; 可以发现我们的代码特别的冗余,而且不美 ...
- JAVA数组的定义以及使用1
public class HelloWorld { public static void main(String[] args){ // Scanner s = new Scanner(System. ...
- JAVA数组的定义方式
JAVA中,数组有以下几种定义方式: 1.先定义数组中元素的个数,然后再进行元素赋值 int[] a=new int[2]; a[0]='a'; a[1]='b';a[2]='c'; 2.元素个数与元 ...
- java数组的定义
class ArrayDome { public static void main(String[] args) { //元素类型[] 数组名 创建一个 元素类型[元素个数或数组长度] /* 需要一个 ...
- Java 数组的定义和遍历
1.一维数组 数组是用来存储一组相同数据类型数据的数据结构 数组的元素可以是简单数据类型的数据,也可以是引用数据类型的数据 无论数组内容是简单类型还是引用类型,数组自己本身都是一种引用类型 每个数组元 ...
- java 数组的定义
package java03; /* 数组的初始化:就是创建一个数组,并向其中古语一些默认的值 两种常见的初始化方式: 1.动态初始化(指定长度) 2.静态初始化(指定内容) 动态初始化数组格式: 数 ...
随机推荐
- 【解决方案】Pyinstaller打包exe策略(简单实用)
场景说明 在业务场景中, 经常需要Python开发一些小程序/脚本/GUI界面,进行简单的项目测试或未安装Python 的小伙伴们使用. 使用Pyinstaller将Python脚本或者项目打包,生成 ...
- ABAP——系统状态&用户状态修改、查询
前言:在ABAP开发中有时候会涉及到状态的变更,比如销售订单的系统状态变更未审批->已审批.设备的在运->报废等,在这里就需要用到标准函数I_CHANGE_STATUS.STATUS_CH ...
- Java 代码执行流程
Java 代码执行流程 类加载过程 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 类加载时机:代码使用到这个类时 验证阶段 &qu ...
- Android 有意思的脚本(打印温度)
https://github.com/LineageOS/android_hardware_google_pixel/blob/lineage-18.1/thermal/device.mk #!/sy ...
- laravel DB 类库
DB 类操作数据库 基本用法: DB::table('tableName'); 获取操作tableName 表 增加信息 对数据库中的某个表增加数据主要有两个函数可以 ...
- [cf461E]Appleman and a Game
考虑我的每一次添加操作,要满足:1.该串是t的子串:2.该串不能与下一次的串开头字母构成t的子串.那么,设f[i][j][k]表示拼i次,第i次填入的开头字母是j,第i+1填入的开头字母是k的最短长度 ...
- springboot访问静态资源404
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- 对于cmd命令的一些常用用法
cmd命令是当今比较常见的主机命令,对于一些文件的执行和后台数据的控制有着比较有效的规范. 现在就讲几个比较常见的命令. IP查询 按住window+r 进入控制台,在输入cmd命令.在弹出的 cmd ...
- JavaScript Sanitizer API:原生WEB安全API出现啦
10月18号, W3C中网络平台孵化器小组(Web Platform Incubator Community Group)公布了HTML Sanitizer API的规范草案.这份草案用来解决浏览器如 ...
- spring通过注解注册bean的方式+spring生命周期
spring容器通过注解注册bean的方式 @ComponentScan + 组件标注注解 (@Component/@Service...) @ComponentScan(value = " ...