type[] arrayName; // 数据类型[] 数组名;或者
type arrayName[]; // 数据类型 数组名[];可见数组的声明有两种形式:一种是中括号”[]“跟在元素数据类型之后,另一种是中括号”[]“跟在变量名之后。
type[] arrayName
,很容易理解这是定义一个变量,其中变量名是 arrayName,而变量类型是 type[]。type arrayName[]
的可读性就差了,看起来好像定义了一个类型为 type 的变量,而变量名是 arrayName[],这与真实的含义相去甚远。type arrayName[]
这种定义数组的方式,这可能是因为早期某些计算机读物的误导,从现在开始最好就不要再使用这种糟糕的方式了。type arrayName[]
这种语法,它只支持第一种定义数组的语法。越来越多的语言不再支持type arrayName[]
这种数组定义语法。int[] score; // 存储学生的成绩,类型为整型 double[] price; // 存储商品的价格,类型为浮点型 String[] name; // 存储商品名称,类型为字符串型
int score[10]; // 这是错误的
arrayName = new type[size]; // 数组名 = new 数据类型[数组长度];其中,数组长度就是数组中能存放的元素个数,显然应该为大于 0 的整数,例如:
score = new int[10]; price = new double[30]; name = new String[20];这里的 score 是已经声明过的 int[] 类型的变量,当然也可以在声明数组时就给它分配空间,语法格式如下:
type[] arrayName = new type[size]; // 数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[5];执行后 arr 数组在内存中的格式如图 1 所示。
图 1 一维数组的内存格式
方法 | 名称 | 返回值 |
---|---|---|
clone() | Object | |
equals(Object obj) | boolean | |
getClass() | Class<?> | |
hashCode() | int | |
notify() | void | |
notify All() | void | |
toString() | String | |
wait() | void | |
wait(long timeout) | void | |
wait(long timeout,int nanos) | void | |
属性 | length | int |
type[] arrayName = new int[size];创建数组之后,元素的值并不确定,需要为每一个数组的元素进行赋值,其下标从 0 开始。
int[] number = new int[5]; number[0] = 1; number[1] = 2; number[2] = 3; number[3] = 5; number[4] = 8;
type[] arrayName = new type[]{值 1,值 2,值 3,值 4,• • •,值 n};
int[] number = new int[]{1, 2, 3, 5, 8};上述代码的效果等价于例 2 的效果。
int[] number = new int [5] {1,2,3,4,5};
type[] arrayName = {值 1,值 2,值 3,...,值 n};
int[] number = {1,2,3,5,8};使用这种方式时,数组的声明和初始化操作要同步,即不能省略数组变量的类型。如下的代码就是错误的:
int[] number; number = {1,2,3,5,8};
arrayName[index];其中,arrayName 表示数组变量,index 表示下标,下标为 0 表示获取第一个元素,下标为 array.length-1 表示获取最后一个元素。当指定的下标值超出数组的总长度时,会拋出 ArraylndexOutOfBoundsException 异常。
int[] number = {1,2,3,5,8}; System.out.println("获取第一个元素:"+number[0]); System.out.println("获取最后一个元素:"+number[number.length-1]); System.out.println("获取第6个元素:"+number[5]);执行上述代码,输出结果如下所示:
获取第一个元素:1 获取最后一个元素:8 java.lang.ArrayIndexOutOfBoundsException: 5我们一共存入了 5 个值,所以下标的取值为 0~4。因为 number[5] 取出的内容超过了这个下标,所以输出结果会提示数组索引超出绑定异常(ArrayIndexOutOfBoundsException)。这一点是在使用数组中是经常出现的问题,大家在编写程序时应该引起注意。
import java.util.Scanner; public class Test06 { public static void main(String[] args) { int[] prices = new int[5]; // 声明数组并分配空间 Scanner input = new Scanner(System.in); // 接收用户从控制台输入的数据 for (int i = 0; i < prices.length; i++) { System.out.println("请输入第" + (i + 1) + "件商品的价格:"); prices[i] = input.nextInt(); // 接收用户从控制台输入的数据 } System.out.println("第 3 件商品的价格为:" + prices[2]); } }上述代码的“int[] prices = new int[5]”语句创建了需要 5 个元素空间的 prices 数组,然后结合 for 循环向数组中的每个元素赋值。
请输入第1件商品的价格: 5 请输入第2件商品的价格: 4 请输入第3件商品的价格: 6 请输入第4件商品的价格: 4 请输入第5件商品的价格: 8 第 3 件商品的价格为:6
int[] number = {1,2,3,5,8}; for (int i=0;i<number.length;i++) { System.out.println("第"+(i+1)+"个元素的值是:"+number[i]); }除了使用 for 语句,还可以使用 foreach 遍历数组中的元素,并将元素的值输出。代码如下:
for(int val:number) { System.out.print("元素的值依次是:"+val+"\t"); }
本文链接:http://task.lmcjl.com/news/4699.html