一、数组
数组是用来存储一组相同类型数据的结构。数组元素在内存中是连续存放的,数组名代表的是这个数组的首地址。
二、数组的声明
语法:
类型 数组名[];
或者: 类型[] 数组名;
比如:String[] args或者String args[]
int[] a;
数组声明后,并不能直接使用。因为此时还没有分配内存空间。
三、数组的创建
语法:
数组名 = new 类型[整型表达式];
表示分配了空间,分配了整型表达式中值的大小的空间。
a = new int[5];
表示为数组分配了5个整型的内存空间,即这个数组包含5个整型数组元素。相当于5个整型的变量。同时会为每个数组元素赋默认值。
public class Test {
public static void main(String[] args) {
int[] a;//声明数组
a = new int[5];//创建数组
}
}
声明数组和创建数组可以一步完成。语法:
类型[] 数组名 = new 类型[整型表达式];
上例可以改为:
public class Test {
public static void main(String[] args) {
int[] a = new int[5];//一步完成声明和创建数组
}
}
四、数组元素的引用
语法:
数组名[索引]
索引必须是整型数值或整型表达式,索引的值从0开始,最大值为创建时的“整型表达式”的值-1;
上例中的数组a有5个元素,分别为a[0]、a[1]、a[2]、a[3]、a[4]。每个数组元素都可独立进行操作,也可以统一进行操作。
public class Test {
public static void main(String[] args) {
int[] a;
a = new int[5];
a[1] = 3;
for(int n = 0; n < 5; n++){
System.out.println("a[" + n + "]= " + a[n]);
}
System.out.println("a[5]= " + a[5]);
}
}
数组元素的个数不能超过创建时定义的个数,超过就会报异常: ArrayIndexOutOfBoundsException。
public class Test {
public static void main(String[] args) {
int[] a;
a = new int[5];
a[1] = 3;
for(int n = 0; n < 5; n++){
System.out.println("a[" + n + "]= " + a[n]);
}
System.out.println("a[5]= " + a[5]);//异常,因为数组已经越界。
}
}
五、length属性
数组提供了一个属性length,这个属性代表的是数组元素的个数。
语法:
数组名.length
public class Test {
public static void main(String[] args) {
int[] a;
a = new int[16];
a[1] = 3;
for(int n = 0; n < a.length; n++){//length会自动计算数组的长度
System.out.println("a[" + n + "]= " + a[n]);
}
}
}
六、main方法中参数的作用
main方法中的参数是用来在运行时接收数据的。
public class Test {
public static void main(String[] args) {
double r;
r = Double.parseDouble(args[0]);//将字符串转到double类型。
System.out.println("圆的面积为: " + 3.14 * r * r);
}
}
如用命令提示符运行,运行命令改为:
java 类名 数值
如使用eclipse运行,在空白处右击,弹出菜单,选择“run as"->"open run dialog...",会弹出“run”对话框,选择“argument”标签,在“program arguments”中输入数值。
例:1,1,2,3,5,8,13....,计算数列中第20个数的值。
public class Test {
public static void main(String[] args) {
int[] a = new int[20];
a[0] = 1;
a[1] = 1;
for(int n = 2; n < 20; n++){
a[n] = a[n - 2] + a[n - 1];
}
System.out.println("a[19] = " + a[19]);
}
}
七、数组的复制
数组复制不能通过数组名之间进行复制完成。数组名之间的赋值,实质上是地址的传递。最后结果是两个数组共享同一个内存空间。
public class Test {
public static void main(String[] args) {
int[] a = new int[3];
int[] b = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
b = a;//指向同一个内存空间
for(int n = 0; n < a.length; n++){
a[n]++;
}
for(int n = 0; n < b.length; n++){
System.out.println("b[" + n + "] = " + b[n]);
}
}
}
数组复制最简单的方法就是循环复制。
public class Test {
public static void main(String[] args) {
int[] a = new int[3];
int[] b = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
for(int n = 0; n < a.length; n++){
b[n] = a[n];
}
for(int n = 0; n < a.length; n++){
a[n]++;
}
for(int n = 0; n < b.length; n++){
System.out.println("b[" + n + "] = " + b[n]);
}
}
}
八、数组的初始化
数组的初始化就是在创建数组的同时,对数组进行赋值。
语法:
类型[] 数组名 = {值列表};
说明:值列表中各值之间使用逗号进行分隔。
public class Test {
public static void main(String[] args) {
int[] a = {1, 2 , 3};
for(int n = 0; n < a.length; n++){
System.out.println("a[" + n + "] = " + a[n]);
}
}
}