Java基础语法(四、数组)
数组的定义和访问
案例分析:
假如现在要统计某个公司员工的工资情况,以前面所学的知识,公司有100个员工就要定义100变量分别存储每个员工的工资,如果想要输出他们的工资还要编写100次System.out.println()语句,如果再去计算公司员工最高工资、最低工资、平均工资情况,就很难操作而且错误率会很高。
因此我的们可以使用数组(容器),将所有的数据全部存储到一个相关类型的数组中,统一操作。
概念:数组是存储一组相同类型数据的数据结构
特点:
- 数组的元素必须是相同类型,不允许出现混合类型
- 数组的长度是确定的,数组一旦被创建,不允许出现混合类型
- 数组中的元素可以是基本数据类型,也可以是引用类型(数组、类、接口)
- 数组本身属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
数组的定义
语法一
语法:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
动态初始化:数组先开辟内存空间,然后再使用索引再对里面元素的内容进行设置。
说明:
- 数组存储的数据类型:定义创建的数组可以存储哪种类型的数据
- []:表示数组
- 数组名字:数组的变量名
- new:创建数组是使用的关键字
- 数组存储的数据类型:必须和前面的数据类型一致
- 长度:定义数组的长度,表示可以存储元素的个数,长度指定后不可更改
举例:
int[] ints = new int[5];
char[] chars = new char[5];
boolean[] booleans = new boolean[2];
String[] strs = new String[5];
语法二
语法:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[]{元素1,元素2,元素3...};
- 静态初始化:在创建数组时就对数组进行初始化操作。
- []不用指定数组的长度,数组的长度直接由{}中元素的个数决定
举例:
int[] ints = new int[]{1,2,3,4,5};
语法三
语法:
数组存储的数据类型[] 数组名字 = {元素1,元素2,元素3...};
- 静态初始化
举例:
int[] ints = new int[]{1,2,3,4,5};
数组的访问
- 索引:每一个存储到数组的元素,都会自动拥有一个整数编号,从0开始,这个编号就是数组的索引或者下标
- 可以通过 数组名[索引] 访问到数组中的元素。
- 数组的长度属性:每个数组都有自己的长度,而且时固定的,使用 数组名.length ,可以获得数组的长度。(数组的最大索引值为数组名.length-1)
- 索引访问数组的元素
- 数组名[索引]=数值,为数组的元素赋值
- 数组名[索引],获取数组中的元素
public class Test1{
public static void main(String[]args){
int[] ints =new int[3];
ints[0] = 10;
ints[1] = 20;
ints[2] = 30;
System.out.println(ints[1]);
}
}
数组的两个异常
数组越界异常
public static void main(String[]args){
int[] ints = {1,2,3};
System.out.println(ints[3]);
}
创建数组,赋值了三个元素,使用ints[3],数组中没有索引3,因此我们访问不到数组中的第四个元素,程序运行后会抛出ArrayIndexOutOfBoundsException数组索引越界异常 。
数组空指针异常
public static void main(String[]args){
int[] ints = null;//数组属于引用类型,如果给引用类型赋值为空,那就是null
System.out.println(ints[0]);
}
因为ints = null,索引再访问数组中的元素时,会产生一个**NullPointerException空指针异常 **。
数组的遍历
数组元素下表的合法区间:[0,length-1]。可也通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值
public class Test2{
public static void main(String[]args){
int[] ints = {1,2,3,4,5,6,7,8};
for(int i=0;i<ints.length;i++){
System.out.println(ints[i]);
}
//foreach循环用于读取数组元素的值,不能修改元素的值
for(int m :ints){
System.out.println(m);
}
}
}