1、数组的声明及数组的特点
数组是相同类型数据的集合,下面是声明数组的格式:
格式1:
一维数组:
数据类型 数组名[];
数组名 = new 数组类型[数组长度];
二维数组:
数据类型[][] 数组名;
数据类型 数组名[][];
数据类型[] 数组名[] ;
格式2:
数据类型 数组名[] = new 数组类型[数组长度];
数组的以下几个特点:
- 数组中的每一个元素的数据类型都相同且必须相同;
- 数组中的元素长度一旦确定,就不能再改变大小;
- 数组中的元素可以通过下标访问;
- 数组的元素可以是数组,从而形成二维及多维数组。
2、数组的初始化
1、静态初始化
数组的静态初始化是指数组在定义的同时就为数组元素分配空间和赋值,静态初始化不但可以指定每一个数组元素的值,还可以指定数组的长度。
格式1:
一维数组:
数据类型 数组名[]={元素值1,元素值2,元素值3,……元素值n};
二维数组:
数据类型 数组名[]={{第0行元素},{第1行元素}……{第n行元素}};
格式2:
一维数组:
数据类型 数组名[]=new 数据类型[]{元素值1,元素值2,……元素值n};
二维数组:
数据类型 数组名[]=new 数据类型{{第0行元素},{第1行元素}……{第n行元素}};
2、动态初始化
数组的动态初始化是指数组初始化时只需要指定数组长度,由系统为这些元素赋初值。每个元素的值取数组类型相对应的默认值:
元素类型 | 默认初始化值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
char | ‘\u0000’ |
float | 0.0f |
double | 0.0d |
boolean | false |
引用类型(接口、类和数组) | null(空) |
数组的动态初始化:
public class ArrayDemo{
public static void main(String[] args){
String[] pwd=new String[3];//声明String型数组pwd,并且长度为3
pwd[0]="天";//初始化pwd中的每一个元素
pwd[1]="地";
pwd[2]="人";
}
}
3、访问数组元素
格式:
数组名[下标];
输出数组:
public class ArrayDemo{
public static void main(String[] args){
int[] pwd={1,6,9,8,7};
for(int i=0;i<pwd.length;i++){//用for循环遍历数组
System.out.print(pwd[i]+" ");
}
}
}
运行结果:
1 6 9 8 7
在访问数组元素时要注意以下几点:
1、下标的数值超出了下标的范围,此时程序编译是不会报错的,但运行是会报错;
2、直接输出数组变量名,并不能输出数组元素,因为数组名是一个指向数组的储存地址,所以不能直接使用数组名输出数组元素,这样得到的是一个地址;
public class ArrayDemo{
public static void main(String[] args){
int[] pwd={1,6,9,8,7};
System.out.print(pwd);
}
}
结果如图:
其含义为:
- [I 表示该对象为一个一维数组,二维数组表示为[[I。
- @11381e7,表示数组在内存中的地址
4、获取数组的长度
java语言的数组提供了length属性,通过这个属性可以得到数组的长度:
public class ArrayDemo{
public static void main(String[] args){
int[] pwd={1,6,9,8,7};
int len=pwd.length;
System.out.print(len);
}
}
结果为 :
5
5、foreach语句
foreach语句可以方便的遍历输出数组和集合,与for语句不同的是foreach语句遍历数组和集合时不需要知道数组的长度:
foreach语法:
for(数据类型 变量名:数组名){
循环体
}
范例:
public class ArrayDemo{
public static void main(String[] args){
int[] pwd={1,6,9,8,7};
for(int lzq:pwd){
System.out.print(lzq+" ");
}
}
结果:
1 6 9 8 7
6、匿名数组
public static int sum1(int[] array) {
int sum = 0;
for(int i : array) {
sum += i;
}
return sum;
}
/**
* 可变参数编程
* @param array
* @return
*/
public static int sum(int... array) {
int sum = 0;
for(int i : array) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
sum1(new int[] {1,2,5,3,8});
sum(new int[] {2,6,9,7,4}); //匿名数组
}
7、打印菱形
private static void show(int n) {
if(n % 2 == 0) { //只支持奇数
return;
}
int mid = n/2;
for(int i = 0;i < n;i++) {
//打印上半部分
if (i <= mid) {
for (int k = i; k < mid; k++) {
System.out.print("\t");
}
for (int j = 0; j < 2 * i + 1; j++) {
System.out.print("*\t");
}
System.out.println();
}else { //打印下半部分
for(int k = 0;k < i-mid;k++) {
System.out.print("\t");
}
for (int j = i; j < 2*n-i-1; j++) {
System.out.print("*\t");
}
System.out.println();
}
}
}