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.静态初始化(指定内容) 动态初始化数组格式: 数 ...
随机推荐
- centos 7 安装nfs 实现主机目录共享
多台服务器之间共享目录,实现每个服务器进入目录看到的内容都一样 服务器A 服务器B 1.服务器A和服务器B,安装 nfs-utils和rpcbind #yum install -y nfs-utils ...
- zabbix 监控redis 挂掉自动重启 并发送企业微信
1.创建redis监控项[配置]-[主机]-[监控项]-创建监控项,监控6379端口(注意关闭防火墙或者开启防火墙端口6379) redis配置文件设置允许任何地址监听: 添加监控项 2.创建redi ...
- 解决虚拟机linux系统全屏问题
修改设置 1) 如下图右单击虚拟机名,选择[settings-],调出虚拟机设置界面. 2) 在设置界面选择[hardware]->[CD/DVD2(IDE)]->[Connection] ...
- macos command 'clang' failed with exit status 1
export CC=$(which gcc)export CXX=$(which g++)pip install fbprophet CC=clang pip install gevent
- redis-sentinel "DENIED Redis is running in protected mode"
protected-mode no in sentinel.conf https://github.com/antirez/redis/issues/3106
- Chapter 1:Create You First 3D Scene With Three.js
1,各浏览器对WebGL的支持 手机浏览器对WebGL的支持: 书的源码:https://github.com/josdirksen/learning-threejs 第一次用浏览器打开代码可能无法正 ...
- Part 30 AngularJS routeparams example
Here is what we want to do : When we navigate to /students, the list of student names must be displa ...
- 大爽Python入门教程 0-4 安装Pycharm
大爽Python入门公开课教案 点击查看教程总目录 安装重量级IDE--Pycharm 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接前往步骤3来下载. 使用搜索引擎搜索Pycharm, 打开搜索 ...
- Robot frawork关键字使用报错原因
对比发现1或者${1}两种方式赋值输出的类型都为整形 >>> ${test1} set variable 'www' >>> log ${test1 ...
- 【拥抱元宇宙】创建你的第一个Unity程序HelloWorld,并发布
第一个Unity程序--Hello World. 1.需要先下载一个Unity Hub,以及安装Unity编辑器.Unity Hub需要登陆,激活码可以选择个人用户,免费的.免费的无法改变启动画面,其 ...