[Java入门笔记] Java语言基础(五):数组

简介

数组可用用于存储存储多个数据,Java的数组要求所有的数组元素具有一种相同的数据类型。一旦数组初始化完成,数组在内存中的空间被固定下来,长度不可改变,即使把数组的元素清空,所占用的空间依然被保留。

生活案例:博物架

每一个物品架都是相同类型的物品,长度不变,即使把物品下架,物品架依然不会改变。

定义数组

使用数组4步走:

1、声明数组

Java中支持两种格式的数组定义格式:

类型[] 变量名;
类型 变量名[];

例:

int[] a;
int b[];  //两种方法都行,不过建议使用第一种。

声明数组也就相当于上面例子中购买了一个定制的物品架(数组)到博物馆中,但是还没有确定物品架的大小(数组的大小),也还没有往物品架上放东西(数组元素)。

2、分配空间

分配空间也就是对数组进行初始化,初始化分为两种方式:

第一种:静态初始化

静态初始化的语法格式如下:

数据类型[] 变量名 = new 数据类型[]{数据1, 数据2,数据3,......};

例:

int[] a = new int[]{4,2,64,12,3};  //将这些数存放在数组中,数组的大小(长度)为花括号中元素的数量,该例子中大小为5
String[] b = new String[]{"张三", "李四", "王五"};  //所有数据的类型必须为定义的数据类型
int[] c = {2,5,7};  //也可以使用这样的简写方式

这就如同购买一个定制的物品架回来,同时将展示品放到物品架中一起购买回来,而物品架的大小就有多少物品就就有多大。

第二种:动态初始化

动态初始化是只指定数组的大小,由系统为每个元素指定初始值得一种方式。语法格式如下:

数据类型[] 变量名 = new 数据类型[大小];

在这个格式中, 需要为其指定一个整数类型的数组大小,指定后,将确定数据的长度,数组能够存放多少元素。同时为所有元素指定一个默认初始值。

例:

int[]  a = new int[5];  //定义一个数组,长度为5,也就是说,能够存放5个int类型的数据,同时,默认5个值初始化为0

初始化时默认值按以下规定设置:

  • byte,short,int、long默认为0;
  • float、double默认为0.0;
  • char默认为‘\u0000‘;
  • boolean默认为false;
  • 其他引用类型默认为null;

3、赋值

尽管你已经初始化好了数组,但是我们还是可以通过通过赋值的方式改变里面的数据。那么已经初始化好了数组,确定了数组的大小,我们该如何为没一个数组元素赋值呢?

数组中还有一个下标的概念,数组初始化的时候,会为每个元素分配一个下标,就和物品展示架上的编号一样,我们可以通过下标为每个元素重新赋值。

数组的下标从0开始,也就是说,第一个元素的下标为0,至于为什么要从0开始,我们后面再探讨一下,我们先看看赋值的例子:

int[]  a = new int[3];  //定义一个长度为3的int类型数组,里面3个元素值已默认为0;
a[0] = 4;  //设置第一个元素值为4
a[1] = 5;  //设置第二个元素值为5
a[2] = 7;  //设置第三个元素值为7

为什么数组下标从0开始?

首先我们需要知道的是,程序是在电脑内存中运行的,当我们的程序开始处理数据时,会在内存中开辟一个小小的空间用来存储数据,在代码中也就是定义一个变量,如:

int a = 5;

定义一个int类型变量,值为五,而在内存中表示为,在内存中分配一小块内存,命名为a,里面存的值为5。

而我们是如通过a这样一个变量名得到内存中的值得呢?是因为每一小块内存都会有一个地址,就如同我们居住的家有一个地址一样,通过这个地址,通过这个地址,就能知道里面住的是谁。

二数组在内存中是以相连的位置存储的,方便对数组的操作,我们看一个例子:

int[] b = new int[3];  //定义一个int类型的数组,长度为3,里面的元素默认值为0

此时内存中是这样的:

数组中获得数据也是如此,如何知道b数组每个元素的数据呢?首先我们知道通过b这个数组在内存中的哪个位置,因为数组在内存中是一个相连的内存空间,所以b[0]的位置就等于b+0,而b[1]的位置就为b+1,b[2]=b+2,......以此类推,知道了数组所有元素的位置。而数组中第一个元素正好是在数组中开头的位置,用b[0]表示,则刚好是b表示的位置,而用1表示第一个元素的位置,则需要表示为a+1-1。

4、处理数据

在前面的内容中,我们已经定义了数组,初始化了数组,赋了值,那么如何使用数据呢,其实前面已经分析过,我们通过数组下标来为数组赋值,也通过数组下标得到每个数组元素的值。

int[] a = new int[3];
a[0] = 3;
a[1] = 4;
a[2] = 5;
System.out.println(a[1]);  //得到数组的第二个位置的值,将它输出

//我们也可以通过循环遍历数组中每个元素
for(int i = 0; i < a.length; i++){
    System.out.println(a[i]);  //循环打印出数组中每个元素
}

在上面的例子中,循环打印的时候,我们看到,使用了a.length,通过 数组变量名.length 可以得到数组的长度,所以上面我们通过a.length得到数组的长度为3,循环3次,打印出数组的元素。

不应该访问不存在的下标

上面我们知道,我们控制数组是通过 变量名[下标] 来为变量赋值或者得到值,而如果访问超过了数组长度的下标时,则会出现异常。

int[] a = new int[2];
a[5] = 2;  //a数组长度只有2个长度,而我们通过下标5访问第6个元素,实际a数组不存在这个位置,则会出现异常。

二维数组或多维数组

上面我们讲的都是在数组中存储一种基本数据类型或引用数据类型,而我们也可以在数组中存储数组:

上面我们在一个数组元素中存储了另外一个数组元素,里面那个数组存储了一种数据类型int的值,我们称这样的数组为二维数组。

二维数组的定义,初始化和赋值

数据类型[ ] [ ]  数组名 = new 数据类型[长度1][长度2] ;

长度1为外面一层数组的长度,长度2位里面一层的长度。

定义和初始化上图中的形式,我们可以这样:

int[][] a = new int[3][3];
a[0][0] = 2;  //访问时前面一个方括号的数字表示外面一层数组的元素下标,第二个方括号的数字表示里面一层的数组的下标
a[0][1] = 3;
a[0][2] = 4;
a[1][0] = 5;
a[1][1] = 3;
a[1][2] = 9;
a[2][0] = 90;
a[2][1] = 70;
a[2][2] = 85;

我们也可以将二维数组定义成这样一种格式:

int[][] a = new int[3][];  //在定义初始化时设置外面一层长度为3,不设置里面一层的长度,
a[0] = new int[2];  //初始化里面每一层,设置长度
a[1] = new int[1];
a[2] = new int[3];

a[0][0] = 3;  //为每一个元素赋值
a[0][1] = 4;
a[1][0] = 9;
a[2][0] = 90;
a[2][1] = 70;
a[2][2] = 85;

而三维数组就是数组里面的数组里面存放的是数组~~~~~以此类推可以有n多维数组,不过一般人使用的不多  ~~~^_^~~~

时间: 2024-10-13 12:58:48

[Java入门笔记] Java语言基础(五):数组的相关文章

[Java入门笔记] Java语言简介

前言 学习Java有一段时间了,但是一直缺少一个系统的思想,现在重新通过书籍中.网上的文章,视频等资料,整理与回顾Java的知识点. 言归正传,让我们先从了解Java语言开始. Java语言的由来 Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出.Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的.1995年更名为Java,并

[Java入门笔记] Java语言基础(一):注释、标识符与关键字

注释 什么是注释? 注释是我们在编写代码时某段代码.某个方法.某个类的说明文字,方便大家对于代码的阅读.被注释的内容不会被编译.执行. Java的注释分为三种类型:单行注释.多行注释.文档注释. 单行注释和多行注释 单行注释在程序中注释一行文字或代码,Java中,使用“//”进行单行注释.多行注释可以一次性将多行代码注释,Java中使用“/*”表示多行注释开头,“*/”表示多行注释结尾 例: public class CommentTest{ public static void main(St

[Java入门笔记] 面向对象编程基础(三):成员变量和局部变量

在类中,变量根据定义的位置不同,可以分为成员变量和局部变量. 成员变量是在类体内,方法之外定义的变量,局部变量是在方法中定义的参数. 成员变量 成员变量分为类属性和实例属性,定义时没有static修饰的称为实例属性,有static修饰的称为类属性,类属性和实例属性的区别就是类属性是属于类的,它并不属于哪一个对象,它从这个类的准备阶段就一直存在,一直到这个类完全销毁.实例属性属于对象,只有某个对象被创建时,它才被创建,对象被回收,从属于该对象的实例属性也就被销毁了. 类属性的定义语法: [修饰符]

C语言基础五 数组的应用

.根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩 int scoure[10];//存储10个数据的数组 int i; int sum;//总成绩 int max,min,avg;//最大值,最小值,平均成绩 for(i=0;i<10;i++){ printf("请输入%d个成绩",i+1);//获取用户输入的值 scanf("%d",&scoure[i]); sun+=scoure[i]//总成绩 }avg=sum/10;

iOS学习笔记---oc语言第五天

字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key-value对)的数据 对于“name:张三”来讲,key就是“name”,key对应的value是“张 三” 一个key-value对认为是一个元素(实体),字典是存储key-value对 的容器. 特点: 与数组不同,数组靠下标存取数据,数组的下标是唯一的. 字典靠key存取元素.key不能重复,

编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)

你背或者不背,干货就在那里,不悲不喜 你学或者不学,编程就在那里,不来不去 听到这话的你是否略感扎心? 编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)01基础知识 计算机系统的主要技术指标与系统配置. 计算机系统.硬件.软件及其相互关系. 微机硬件系统的基本组成. 包括:中央处理器(运算器与控制器),内存储器(RAM与ROM),外存储器(硬盘.软盘与光盘),输入设备(键盘与鼠标)输出设备(显示器与打印机).如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学

黑马程序员-C语言基础:数组和字符串

数组:数组的定义注意点 数组初始化正确写法: int args[5] = {1,23,32,4,5}; int args[5] = {12,23}; int args[5] = {[3]=23, [4]=13};//这种写法也可以,直接给其中角标为3和4的赋值 int args[] = {12,23,32};//中括号中没写数组大小,在大括号中一定要写具体数值 int args['A'] = {2,34,5}; 错误写法: int args[];//这样编译器不知道给你开辟多大的内存空间 int

C语言基础:数组作为函数参数传递演示源码

将做工程过程中常用的内容片段记录起来,如下内容内容是关于C语言基础:数组作为函数参数传递演示的内容,应该能对小伙伴也有好处. #include <stdio.h> void show_array(int values[], int number_of_elements) { int i; printf("About to display %d valuesn", number_of_elements); for (i = 0; i < number_of_elemen

GO学习-(8) Go语言基础之数组

Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为int的数组a var a [3]int 数组定义: var 数组变量名 [元素数量]T 比如:var a [5]int, 数组的长度必须是常量,并且长度是数组类型的一部分.一旦定义,长度不能变. [5]int和[10]int是不同的类型. var a [3]int var b [4]int a =