用于批量保存一类数据,是引用数据类型之一
一、声明一个数组
变量的格式: 数据类型 变量名 = 值;
int a = 10;
int b ;
b = 20;
int[] scores;
String[] names;
Person[] persons;
二、为数组初始化并赋值
1、静态初始化:初始化操作和赋值操作同时进行
scores = new int[]{1,2,3,4,5};
2、动态初始化:初始化操作和赋值操作分开进行
names = new String[3];//数组中有三个String类型的值
names[0] = "张三"; //0表示数组在内存中的第一个值得索引值
names[1] = "小李";
names[2] = "校长";
persons = new Person[3];
persons[0] = new Person();
persons[1] = new Person("张三",18);
persons[2] = new Person("小李",20);
三、数组的遍历
int s = scores[0];
System.out.println(s);
System.out.println(scores[1]);
System.out.println(scores[2]);
System.out.println(scores[3]);
System.out.println(scores[4]);
1、普通 for 循环遍历数组
for(int i = 0; i < scores.length; i++){
int a = scores[i];
System.out.println(a);
}
for(int i = 0; i < persons.length; i++){
Person p = persons[i];
System.out.println(p.say());
}
2、增强 for 循环遍历数组
for (被遍历数组中元素的数据类型 变量名 : 被遍历的数组 ){
}
for(int a : scores){
System.out.println(a);
}
for(Person p : persons){
System.out.println(p.say());
}
注意:增强 for 循环不擅长修改数组元素中的值
//需求:该变数组中元素的值
for(int a : scores){
if(a == 2){
a = 22;//改变变量 a 的值,与数组中元素的值没关系
}
}
for(int i = 0; i < scores.length; i++){
if(scores[i] == 2){
scores[i] = 22;
}
}
for(Person p : persons){
if(p.getAge( == 18)){
p.setAge(22);
}
}
for(Person p : persons){
System.out.println(p.getAge());
}
四、数组的特点
1、数组无论静态初始化还是动态初始化都必须指明长度
2、数组中每个元素都具有索引值(也叫下角标、下标),索引值从 0 开始,到数组的长度减 1
3、获取数组长度的属性: .length
五、数组的默认值
基本数据类型的默认值:
byte short int-----> 0
long ---->0L
float ------> 0.0F
double ------> 0.0D
char ------->\'\u0000\'
boolean ------>false
引用数据类型的默认值:-----> null
类(class)
接口(interface)
数组([])
六、数组的常见异常
int[] arr = new int[];
arr[7] = 100;//ArrayIndexOutofBoindsException 数组下角标异常
Person[] persons = new Person[3];//{new person(张丹),15.null,null}
person[0] = new Person("张丹",15);
for(Perspn p : persons){
System.out.println(p.say());//null.say()
}//NullPointerException 空指针异常
七、二维数组
1、声明一个二维数组
int[][] arr;
2、为二维数组初始化并赋值
①静态初始化:初始化操作和赋值操作同时进行
arr = new int[][]{ {1,2,3}, {4,5,6}, {7,8} }
②动态初始化:初始化操作和赋值操作分开进行
方式一
//int[2][5] 2代表二维数组中有2个一维数组,5 代表每个一维数组中有 5 个int类型数据
arr = new int[3][4];//{ {0,11,0,0}, {0,0,66,0}, {0,0,0,0} }
arr[0][1] = 11;
arr[1][2] = 66;
方式二
arr = new int[][];//{ null, {0,66}, {0,0,0} }
arr[1] = new int[2];
arr[2] = new int[3];
arr[1][1] = 66;
3、二维数组的遍历
//从二位数组中获取一个个的一维数组
for(int i = 0; i < arr.length; i++){
int[] as = arr[i];
//从一维数组中取出一个个的 int 类型的数据
for(int j = 0; j < as.length; j++){
System.out.print(as[j] + "\t");
}
System.out.println();//换行操作
}
//从二位数组中取出一个个的一维数组
for(int i = 0; i < arr.length; i++){
//从一维数组中取出一个个int类型的数据
for(int j = 0; j < arr.length; j++){
System.out.print(arr[i][j] + "\t");
}
System.out.println();//换行操作
}
//增强for循环
for(int[] as : arr){
for(int a : as){
System.out.print(a + "\t");
}
System.out.println;
}
八、命令行参数
class Helloworld{
public static void main(String[] args){//args:命令行参数
for(int i = 0; i < args.length; i++){
System.out.println(args[i]);
}
//将String转换成 int
int num = Integer.parseInt(args[0]);
}
}
//通过运行命令 java Helloworld "aaa bbb vvv" 传递一些测试数据
九、可变参数
注意:
①可变参数和数组参数之间不能构成重载
②可变参数必须写在参数列表的末尾
public static void main(String[] args){
int[] arr = {1,2,3,4}
int sum = add(arr);//每次使用该方法,需要创建一个数组,有点麻烦
}
//需求:计算两个整数的和
public int add(int a ,int b){
return a + b;
}
//需求:计算三个整数的和
public int add(int a ,int b, int c){
return a + b + c;
}
//需求:计算n个整数的和
public int add(int[] arr){
int sum = 0;
for(int i = 0; i < arr.length; i++){
sum += arr[i];
}
return sum;
}
//可变参数底层是数组,数组中数据如何取,可变参数中的数据就如何取
public static int add(int ... arr){//可变参数,调用该方法时可以传递 0 个或多个int类型的值
int sum = 0;
for(int i = 0; i < arr.length; i++){
sum += arr[i];
}
return sum;
}
public static void add(String ... args){}
public static void add(double d1,String ... args){}
public static void add(double ... d1,String ... args){}//这是错误的