eryangya

用于批量保存一类数据,是引用数据类型之一

一、声明一个数组

变量的格式: 数据类型 变量名 = 值;

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){}//这是错误的

 

分类:

技术点:

相关文章: