数组

我们编码中面临的问题

首先我们来看一个问题,如果我要录入学生的成绩,是不是要定义一个变量分数score,那我班有50个学生,是不是要定义50个变量呢?那我要录入我们一个年级的全部学生的成绩,是不是要把全部学生的成绩都要定义成一个个单独的变量呢?显然写这么大量重复的代码是没有意义的!如何解决这个问题,Java语言提供了一个简单的数据结构——数组(array)。我们这章主要介绍几本类型数组。


1)什么是数组?

概念

概念:数组是同一种数据类型的元素组成的集合
其实数组就是一个容器。我们想要对某些数据进行处理,首先就要想到怎么存储这些数据。就像上面这个关于成绩的问题,我们没必要把每个学生的分数都定义成一个变量,可以直接定义一个分数的数组,然后让数组里面的每一个元素都代表了每一个学生的分数。

注意:数组可以装任意类型的数据,但是定义好的数组只能装同一种数据类型的元素, 也就是数组一旦定义,那么里面存储的数据类型也就确定了。

数组的好处?

存数据和不存数据有什么区别吗?数组的最大好处就是能都给存储进来的元素自动进行编号,方便操作这些数据。 注意编号是从0开始


2)数组的定义

a)语法

元素类型[] 数组名 = new 元素类型[大小];
示例:

    int[] arr = new int[5];

a) 大小 代表的是数组中元素个数或数组长度,就像这个 5 ,即为数组中元素的个数,也称为数组长度。
b)int[]为数组类型,代表定义了一个int类型的数组,它里面的每一个元素都只能是int类型;
c)arr称为数组类型变量(引用),就像变量名一样,但是数组是一个引用类型,而不是我们学过的基本数据类型,所以arr可以说是数组的名字,也可以说是一个引用类型变量(简称引用),
new为特定的声明引用类型的关键字, 正是因为new语句,才使得数组分配到了指定大小的空间(后面详细讲解,先记住)。

b)定义实质

定义数组的过程其实是两个步骤,例如:
int [] arr;
arr=new int[5];

①数组的声明

数组声明的方式有两种:

    元素类型 [] 数组名;元素类型  数组名[];

例如:int []arr 和int arr []两种写法均可,但是常用int [] arr。

②给数组分配空间

声明数组时并不规定数组长度,可以看到声明时仅指定了类型 int [],并未指定长度,那是因为这时候还没有给它分配空间,而用new关键字分配空间时则需指定分配的空间大小,如new int[5]。

注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后数组的长度是不能修改的可以使用length 属性获取数组的大小


3)数组的初始化

我们刚才定义了长度为5的int型数组,但是你知道这5个元素的值是什么吗?你不知道,但是我知道啊~
基本类型 的数组创建后,JVM会默认为其数组元素设置了初始值(默认值),元素的初始值如下所示:
byte、short、char、int、long为0;
float和double为0.0;
boolean为false。

注意,此处强调的是基本类型数组的默认值,后期会介绍数据元素为非基本类型的,它的默认初始值与基本类型不同。

而我们既然要用到数组,那肯定不会用到它的默认值,所以很多时候我们会手动设置初始值,也就是数组的初始化。
a)不使用关键字new

int [ ] arr = { 10,23,30,-15,21 } ; 

这种方式,元素的个数即为数组的长度。但是这种写法只能用于声明时的初始化,不能用于先声明后赋值的情况,例如,下面的代码会有编译错误:

int []arr;
arr= { 10,23,30,-15,21 };//报错   

b)分配空间时以元素的个数作为数组的长度

int[] arr = new int[]{ 10,23,30,-10,21 };

c)定义好之后,重新给数组的每一个元素赋值

int []arr=new int[5];
arr[0]=10;//用下标来表示数组中的第几个元素,从0开始,下面会详细讲到
arr[1]=23;
arr[2]=30;
arr[3]=-15;
arr[4]=21;

这种方式已经不算是初始化,但是是我们比较常用的赋值方式


4)数组的访问

a)获取数组的长度

调用数组的length属性可以获取数组的长度
代码示例:

    int[] arr = new int[]{10,23,30,-10,21};System.out.println(arr.length);//输出数组长度  5

b)通过下标访问数组中的元素

通过数组的下标可以访问到数组的每一个元素,下标从0开始,最大到length-1,超出下标范围会报数组下标异常。

因为下标从0开始,所以数组下标最大值肯定是它的长度减 1 ,例如:
int [] arr=new int[5];
则下标最大是arr.length-1 ==>5-1==>4
代码示例:

int[] arr = new int[]{10,23,30,-10,21};
System.out.println(arr[0]);//  10
System.out.println(arr[arr.length-1]);//21 

上例中,arr[arr.length-1] 数组下标为该数组的长度减1,说明是数组中的最后一个元素,也就是21

c) 遍历数组元素

遍历数组也就是依次对数组中的每一个元素进行访问,对数组整体进行操作。通常会使用for循环语句,将数组元素的下标作为循环变量,即可访问数组中的每一个元素。
代码示例:

    int arr=new arr[5];for(int i=0;i<arr.length;i++){arr[i]=10;//给数组中的每一个元素都赋值为10}

上面代码中用循环,i 的值是从0到 length-1 ,刚好是数组元素的下标范围之内,下面我们再讲上面代码中的数组元素遍历输出看一下:

//接上面代码
for(int i=0;i<arr.length;i++){System.out.println("数组的第"+(i+1)+"个元素是:"+arr[i]);
}

结果是:

数组的第1个元素是10
数组的第2个元素是10
数组的第3个元素是10
数组的第4个元素是10
数组的第5个元素是10

说明我们刚才遍历数组插入元素是成功的。


5)数组的常见异常

数组中最常见的问题:

1. NullPointerException 空指针异常

原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。

代码按例:

int [] arr;
int x=arr.length;

上例中虽然数组arr已经声明,但是并没有给这个数组分配空间(没有new),也就是这个引用没有指向的地址。

2. ArrayIndexOutOfBoundsException 索引值越界。

原因:访问了不存在的索引值。

案例:

int[] x = { 1, 2, 3 };
System.out.println(x[3]);
//java.lang.ArrayIndexOutOfBoundsException

上例中数组下标越界异常,注意:数组的下标从0开始。

JAVA 基础语法(五)——数组相关推荐

  1. Java基础语法(数组)

    第4天 Java基础语法 今日内容介绍 u 流程控制语句(switch) u 数组 第1章 流程控制语句 1.1 选择结构switch switch 条件语句也是一种很常用的选择语句,它和if条件语句 ...

  2. java基础起步五-数组(1)

    ·数组(array): 简单的说就是一组数. java中数组也是一种数据类型,相同数据类型的匀速按照一定的顺序的集合,而且是有限个类型相同的变量用一个名字来命名. 比如要存储1706A班级的学员成绩, ...

  3. Java基础语法之数组练习——循环输出数列的值并求和

    import java.util.Scanner; public class ArrayPractice{public static void main(String[] args){Scanner ...

  4. java基础语法入门到类型转换问题,运算符,数据输入,数组,方法概述,Debug模式,以及10个小案例的详细介绍。

    java基础语法 目录 java基础语法 1. Java概述 1.1 Java语言发展史(了解) 1.2 Java语言跨平台原理(理解) 1.3 JRE和JDK(记忆) 1.4 JDK的下载和安装(应 ...

  5. Java基础语法总复习

    前言: 对于Java基础语法部分目前就告一段落啦,系列文章目录是之前写过的部分笔记,当然,这些目录中只涉及了我初学时认为应当总结概括的或者知识点较多的章节,对于此篇文章中未细细考究的内容大家可以由系列 ...

  6. 01.Java基础语法

    目录 01.Java基础语法 一,环境搭建 1,Java体系与特点 2,Java跨平台原理 2.1 Java虚拟机(JVM) 2.2 垃圾回收器(GC) 2.3 Java SE组成概念图 2.4 JD ...

  7. Java基础语法(一)——初识Java

    文章目录 一.Java语言概述 1.Java是什么 2.Java 的流行性 3.Java 的特性 (1) 简单性 (2)面向对象 (3) 分布式(微服务) (4) 健壮性 (5) 安全性 (6) 可移 ...

  8. Java基础语法(九)——String类

    文章目录 Java基础语法(九)--String类 一.定义方式 二.内存 三.字符串比较相等 四.字符串常量池 (1) 直接赋值 (2)采用构造方法 (3)intern 的使用 五.理解字符串不可变 ...

  9. Java基础语法96-Java91011新特性

    Java基础语法96-Java9&10&11新特性 一.java9新特性 一. JDK 和 JRE 目录结构的改变 bin 目录 包含命令行开发和调试工具,如javac,jar和jav ...

  10. Java基础语法-双色球彩票

    Java基础语法-双色球彩票 任务概述 今天的任务,是完成双色球彩票程序. 玩法规则:"双色球"每注投注号码由6个红色球号码和1个蓝色球号码 组成.红色球号码从1-33中选择,蓝色 ...

最新文章

  1. 剑指offer:面试题31. 栈的压入、弹出序列
  2. docker 集群中文件挂载的问题
  3. mybatis更新Blob类型字段要用updateByPrimaryKeyWithBLOBs
  4. 常用算法以及加密工具
  5. PHP框架有没有前途?是否适用于复杂的web开发框架
  6. 为什么爬虫需要代理IP?
  7. matlab方差分析加代码和结果分析
  8. 高仿360云盘android端的ui实现,高仿360云盘android端的UI实现
  9. Formal Verification (三) abstraction strategy、reduce complexity for convergence
  10. 蓝绿部署、AB测试、灰度发布、⾦丝雀发布、滚 动发布的概念与区别
  11. 测试人员如何区分前端和后台BUG方法流程
  12. 第2关:java入门
  13. 2023年NOC加码未来编程(小码王赛道)初赛-Scratch(小学低年级组-卷1)
  14. CAD二次开发 对象
  15. 南京工业大学计算机考研难吗,南京工业大学(专业学位)计算机技术考研难吗
  16. python数据库-2
  17. 【vue】二、vue2仿去哪儿网app——首页开发
  18. 讨论▍数据分析师(非数据挖掘,偏业务)是青春饭吗?
  19. UTF8编码的原理及白名单过滤utf8mb4(Caused by: java.sql.BatchUpdateException: Incorrect string value)
  20. h5调起手机拍照功能

热门文章

  1. 均匀带电直线外一点的场强
  2. python github库_让pip使用git和github存储库
  3. EPPlus.Core 1.5.4 报错 font '?' cannot be found docker core运行时2.1.0 alpine镜像 缺失微软字体...
  4. C++ 指针二维数组, C++二维指针数组笔记
  5. celery 4.1下报kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable 处理方式...
  6. opencv 离线文档下载地址在哪里?
  7. MVC模式在Java web 应用程序的实现
  8. Python3.2官方文档翻译--标准库概览(一)
  9. Delphi Form Designer (窗体设计器)之一
  10. 面试题之get和post的区别