java 数组的基本概念
1.数组的基本概念
数组指的是一组相关变量的集合。例如:如果说现在要定义100个整型变量,如果按照我们以前的思路,我们可能这样定义:
public class demo {
public static void main(String[] args) {
int a = 1, b = 2, c = 3, d = 4; ///... ... 一共写100个
}
}
以上的形式的确可以满足技术要求,但是有一个问题,这100个变量没有任何的逻辑控制,那么就会出现对象不方便管理的情况。那么在这样的情况下,就可以用数组来解决此类问题,数组本身数组引用数据类型,所以数组的定义语法如下:
- 声明并开辟数组:数据类型 数组名称 [ ] = new 数组类型[ 长度 ] ; // 数据类型 [ ] 数组名称 = new 数组类型[ 长度 ] ,[ ]的位置也可以这样
- 分步完成:
- 声明数组: 数据类型 数组名称 [ ] = nul ; //声明的时候才会使用 [ ] ,
- 开辟数组:数组名称 = new 数组类型 [ 长度 ] ;
当数组开辟空间之后,那么可以 数组名称[下标 || 索引] 的形式进行访问,但是索引数组的下标都是从0开始的(和python元组概念一样,也是不能越界,会抛出[ArrayIndexOutOfBoundsException]错误)
//以上 定义数组使用的是动态初始化的方式
范例:
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[3]; //声明并开辟一个3个长度的数组
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
}
}
out:
0
0
0
//上面说明动态生成的数组初始化值为0
由于数组是一种顺序结构,并数组的长度都是固定的,那么可以使用循环的语句进行输出(和Python概念一样),而且java里面为了方便数组的输出有一个内置方法可以取得数组长度。
方法 : “ 数组名称 . length ” 如下
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[3]; //声明并开辟一个3个长度的数组
System.out.println(data.length);
}
}
out:
3
赋值并循环输出:
1 public class demo_Array {
2 public static void main(String[] args) {
3 int data[] = new int[3]; //声明并开辟一个3个长度的数组
4 data[0] = 10; //赋值语句
5 data[1] = 20; //赋值语句
6 data[2] = 30; //赋值语句
7 for (int x =0 ; x< data.length;x++){
8 System.out.println(data[x]);
9 }
10 }
11 }
out:
10
20
30
虽然数组的操作很简单,当它也属于引用数据类型,牵涉到内存分配的问题,与对象保存的唯一区别在yu:对象中的堆保存的是属性,而数组中的堆保存的是一组信息;

分步完成的话:
public class demo_Array {
public static void main(String[] args) {
int data[] = null; //声明数组
data = new int[3]; //开辟数组堆空间
data[0] = 10;
data[1] = 20;
data[2] = 30;
for (int i =0 ; i< data.length;i++){
System.out.println(data[i]);
}
}
}
跟对象的概念基本一样
* 既然数组属于引用数据类型,那么数组也可以发生引用传递:
//引用传递的目标必须也是一个数组
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[3]; //声明并开辟一个3个长度的数组
int temp [] = data; //引用传递的目标必须也是一个数组
data[0] = 10;
data[1] = 20;
data[2] = 30;
for (int i =0 ; i< data.length;i++){
System.out.println(data[i]);
}
}
}
以上数组的定义格式是属于动态初始化,操作特点是:先开辟数组空间,而后赋值。
那么也有静态初始化:
1. 数据类型 数组名称 [ ] = { 值,值,值...... } ; (不推荐)
2.数据类型 数组名称 [ ] = new 数据类型 [ ] { 值,值,值...... } ;
静态初始化范例:
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[]{1,2,3,4,5};
for (int i =0 ; i< data.length;i++){
System.out.println(data[i]);
}
}
}
out:
1
2
3
4
5
*在实际工作中数组是会存在的,但它的内容大部分情况下都是通过传递的数据动态生成的,很少会出现这种先开辟数组再使用的情况
*java数组有一个最大的缺陷,长度是不能被改变的,就是不能+1-1长度,所以很少会直接生成使用,而是通过传递动态生成
2.二位数组
在之前的数值里面只有一个 [ ] ,也称为一维数组,而如果要描述更多的数据,可以使用二位数组, 后面有两个[ ] [ ] 。
一维数组:
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 数据 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 |
在一维数组里面要找一个数组,只要确定一个索引就可以了 System.out.println(data[0]); ;
二位数据:
| 索引 | 列:0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 行:0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 |
| 1 | 564 | 87 | 3678 | 453 | 831 | 54 | 12 | 87 | 23 |
| 2 | 75 | 825 | 8787 | 687 | 87 | 35 | 54 | 87 | 57 |
如果现在要确定蓝色这个数据,需要行列定位,例如:行1,列5 = [ 1 ][ 5 ] ;
而定义语法有两类:
- 动态初始化: 数据类型 数组名称 [ ][ ] = new 数据类型 [行的个数][列的个数] ;
- 静态初始化:数据类型 数组名称 [ ][ ] = new 数据类型 [ ][ ] { { 值,值,值... ... } };
所谓的二维数组实际上就是将多个一维数组变成了一个大的数组,并且为每一个一维数组设置了一个行号 ;
静态初始化和输出:
public class demo_Array {
public static void main(String[] args) {
int data [][] = new int[][]{
{1,2,3},
{4,5,6},
{7,8,9}
} ;
//外层循环是控制数组的数据行内容
for (int x = 0 ; x < data.length ; x++){
//内层循环是控制数组的数据列内容
for (int y = 0 ; y < data[x].length ; y++){
System.out.print(data[x][y] + "\t");
}
System.out.println();
}
}
}
out:
1 2 3
4 5 6
7 8 9
* 实际开发中二位数组很少出现
3.数组与方法参数的传递 **
数组也可以传递,但是如果传递的是数组,请观察内存分配。
public class demo {
public static void main(String[] args) {
int data[] = new int[]{1,2,3};
change(data); // data = int temp []
for (int x=0 ; x< data.length; x++) {
System.out.println(data[x]);
}
}
//此方法定义在主类中,并由主方法直接调用
public static void change(int temp[]){
for (int x = 0 ; x < temp.length ; x++){
temp[x] = temp[x] * 2;
// System.out.println(temp[x]);
}
}
}
观察内存:

另外一种:
public class 数组传递 {
public static void main(String[] args) {
int data[] = new int[]{1,2,3};
int temp[] = data; //数组传递
for (int x = 0 ; x < temp.length ; x++){
temp[x] = temp[x] * 2;
}
for (int x=0 ; x< data.length; x++) {
System.out.println(data[x]);
}
}
}
*在进行数组的引用传递中,方法对数组的修改一定会影响原始数据。
java 数组的基本概念的更多相关文章
- JAVA中数组的基本概念与用法
JAVA中数组的基本概念与用法 1. 数组的定义与特点 数组的一种引用数据类型 数组中可以同时存放多个数据,但是数据的类型必须统一 数组的长度在开始时就需要确定,在程序运行期间是不可改变的 虽然可以使 ...
- java数组学习
1. java数组的静态特性: java是静态语言,java中数组的长度是固定的.还有,数组元素的类型也是在定义时指定了的. 2. java数组里的关键词: 数组变 ...
- Java 数组及数组常用算法
1 数组也是一种类型 Java中要求所有的数组元素具有相同的数据类型.因此在一个数组中,数组元素的类型是唯一的,不能存储多种类型的数据. 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此 ...
- 有关JVM处理Java数组方法的思考
在Java中,获取数组的长度和String的长度是两种不同的方法,这引起了本文作者的一番思考.本文从JVM的角度,探讨了Java数组在JVM中是什么对象,有哪些成员,以及声明方法. 作者:jarfie ...
- Java数组初始
首先要清楚数组变量与数组对象的概念.数组变量是一个引用变量,可以指向数组对象. int[] a = new int[]{7, 8, 9}; a是数组变量,指向有new创建的数组对象. 数 ...
- 七、java数组
目录 一.一维数组 声明方式 数组对象的创建 元素为引用数据类型的数组 数组初始化 数组元素默认初始化 数组元素的引用 二.二维数组 概念 初始化 二维数组举例 三.数组的拷贝 四.练习 数组可以堪称 ...
- Java数组的基本讲解
由于Java数组涵盖的内容比较多,这里从个人的角度对主要的内容进行相关的讲解. 如有不足,欢迎批评指正~ 1)Java数组是动态还是静态的啊? Java语言是典型的静态语言,由此推断Java数 ...
- Java数组定义及初始化
数组定义及初始化 数组这玩意是一种用于存放数据最常见数据结构. 数组的的概念及注意点 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一. 数据类型既可以是基本类型也可 ...
- Java 数组最佳指南,快收藏让它吃灰
两年前,我甚至写过一篇文章,吐槽数组在 Java 中挺鸡肋的,因为有 List 谁用数组啊,现在想想那时候的自己好幼稚,好可笑.因为我只看到了表面现象,实际上呢,List 的内部仍然是通过数组实现的, ...
随机推荐
- 前端PHP入门-008-自定义函数
大家已经是有编程经验的WEB前端,那么对于函数已经很熟悉了,PHP当中定义函数跟你们学习的JavaScript一样 想想有哪些函数类型? 我们在实际开发过程当中需要有很多功能都需要反复使用到,而这些反 ...
- 数据分析与展示---anaconda的使用
一:安装 官方源:https://repo.continuum.io/archive/(太慢) 清华源:https://mirrors.tuna.tsinghua.edu.cn/anaconda/ar ...
- SpringCloud学习(3)——Eureka服务注册中心及服务发现
Eureka概述: Eureka是Netflix的一个子模块, 也是核心模块之一.Eureka是一个基于REST的服务, 用于定位服务, 以实现云端中间层服务发现和故障转移.服务注册与发现对于微服务框 ...
- java中BigDecimal在金融行业中的使用
1.引言 在java语言中,double和float用于二进制浮点型计算,无法得到精确的结果.而BigDecimal则用于精确的计算.不超过16位有效数字(最好是不超过13位)的科学和工程计算,可以使 ...
- AES Java加密 C#解密 (128-ECB加密模式)
在项目中遇到这么一个问题: java端需要把一些数据AES加密后传给C#端,找了好多资料,算是解决了,分享一下: import sun.misc.BASE64Decoder; import sun.m ...
- 朋友封装的一个ASP.NET上传文件的方法
朋友做了asp.net开发多年,做了这个,自我感觉封装得还不错!!! 代码如下: #region 上传文件的方法 /// <summary> /// 上传文件方法 /// </sum ...
- CF148A Insomnia cure
公主睡前数龙, 每隔k, l, m, n只都会用不同的技能攻击龙. 假定共数了d只龙, 问共有多少龙被攻击了. 思路: 用一个visit数组记录被攻击过的dragon, 最后遍历visit数组统计被攻 ...
- tf.reduce_sum()_tf.reduce_mean()_tf.reduce_max()
根据官方文档: reduce_sum应该理解为压缩求和,用于降维 tf.reduce_sum(input_tensor,axis=None,keepdims=None,name=None,reduct ...
- kendo method:destroy 解决有些在kendo.all.js 的js 库里报错问题
首先,不得不承认,kendo UI 是个不错的东西,特别对于一个前端开发到行不足的程序猿来说.而在我们使用过程中貌似还是会遇到各种奇怪的问题.比如我们会经常用到对一些控件进行重赋值. destroy ...
- Struts访问servletAPI方式
1.原理