Java一维数组的使用
多个相同类型的数据按照一定的顺序排列的集合并需要一个名字命名,且通过编写的方式对这些数据进行统一管理,这就是数组。数组的组成有1.数组名,2.下标,3.元素,4.数组长度(切记:数组中元素有顺序,不同于集合,顺序不同,数组不同)
一.用前声明(了解下就ok):
1.数组本身为引用数据类型(还有类和接口),数组中的元素可以基本数据和引用数据。
2.数组其实就是在内存中开辟一整块新的连续空间(不连续为链表),而数组名中引用的是这块连续空间的首地址上。
3.数组长度一旦确定就别修改,也不可以修改,如果数组是不想确定的,就在定义数组时别声明数组长度。
4.数组有一维数组,二维数组,三维数组…多维数组。
二.数组的使用(一维数组):
1.数组的声明和初始化:
初始化分为静态初始化和动态初始化两类
静态初始化是数组的初始化和数组与数组元素的赋值同时进行。
动态初始化是初始化和元素赋值分开进行。(如下例所示)
public class Main {
public static void main(String[] args) {
int[] garb=new int[]{1,2,3};
//上是静态初始化
String[] bound=new String[2];
bound[0]="dog";
bound[1]="aunt";
bound[2]="bag";//这就是动态初始化
}
}
初始化格式大致就是上面举出的例子那样式的1.指出数组中元素的类型,2.命名 ,3.赋值或者定义数组长度,但是二者不可同时存在(其实赋值就已经表明了数组长度了)。如下就是错误的:
public class Main {
public static void main(String[] args) {
int[] garb=new int[3]{1,2,3};
} //不可以同时定义数组长度和赋值元素
}
2.调用指定数组:
利用角标调用,必须从0开始。
如下例:调用了garb中的第二和第三个数
public class Main {
public static void main(String[] args) {
int[] garb=new int[]{1,2,3};
garb[1]=100;
garb[2]=garb[1]*2;
System.out.println(garb[2]);
}
}
关于调用只要把角标写对就行,注意从0开始。
3.获取数组长度:
这个只要在数组名后加.和length就可以,具体如下:
public class Main {
public static void main(String[] args) {
int[] garb=new int[]{1,2,3};
System.out.println(garb.length);
}
}
这个输出结果就是数组的长度。
4.遍历数组:
对于遍历数组,先介绍法一:用for循环遍历就ok
见下例:
public class Main {
public static void main(String[] args) {
int[] garb=new int[]{1,2,3};
for (int i=0;i<garb.length;i++){
System.out.print(garb[i]+"\t");
}
System.out.println();
System.out.println(garb.length);
}
}
法二(其实也就是法一,因为算法都差不多,只不过咱们输入的代码更简单而已,直接去用Arrays.toString)
如下:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] garb=new int[]{1,2,3};
System.out.println(Arrays.toString(garb));
}
}
记得开始的import java.util.Arrays;别丢,以及Arrays的开头字母大写。
5.数组默认初始化:
整型的默认初始化值是0;浮点型是0.0;布尔型的是false(因为0是false,1是true);char型的默认初始值是0(ASCLL中的0,不是数字0);引用型的默认初始化值为null
如果动态初始化只是给定长度,而未赋值,结果就会根据数据类型而得出结果。如下:
public class Main {
public static void main(String[] args) {
int[] garb=new int[3];
System.out.println(garb[1]);
} //因为未赋值,所以结果为int默认值0
}