目录
1.数组的介绍
-
数组的概念
数组由同一类型的对象或者基本数据组成,并封装在同一个标识符(数组名称)下。
-
数组是引用类型(对象)
-
动态初始化
-
可以赋值给Object类型的变量
-
在数组中可以调用类Object的所有方法
-
每个数组都有一个由public final修饰的成员变量:length即数组含有元素的个数(length可以是正数或零)
-
-
数组元素
-
数组中的变量被称作数组的元素
-
元素没有名字,通过数组名字和非负整数下标值引用数组元素。
-
2.数组的声明
-
数组的声明
-
数组引用的声明
-
声明数组时无需指明数组元素的个数,也不为数组元素分配内存空间
-
不能直接使用,必须经过初始化分配内存后才能使用
-
-
数组声明举例
Type[ ] arrayName; 例如∶ int[] intArray; String[] stringArray; Type arrayNahe[ ]; 例如∶ int intArray[]; String stringArray[];
-
3.数组的创建
-
数组的创建
-
用关键字new构成数组的创建表达式,可以指定数组的类型和数组元素的个数。元素个数可以是常量也可以是变量
-
基本类型数组的每个元素都是一个基本类型的变量;引用类型数组的每个元素都是对象的的引用
数组的创建举例
arryName=new Type[componets number];
-
//例如:
int[] ai; ai=new int[10];
String[] s; s=new String[3];
//或者可以将数组的声明和创建一并执行
int ai[]=new int[10];
//可以在一条声明语句中创建多个数组
String[] s1=new String[3],s2=new String[8];
对象是引用类型的数据
int[ ] a = new int[5]
int[ ] a (引用):会为a变量在栈内存中开辟一部分空间 new int[5](对象):会在堆内存中开辟一部分空间 = :会把堆空间当中对象的首地址赋值给a变量,建立起引用关系
4.数组元素的初始化
-
声明数组名时,给出了数组的初始值,程序便会利用数组初始值创建数组并对它的各个元素进行初始化
int a[]={22,33,44,55};
-
创建数组的时,如果没有指定初始值,数组便被赋予默认值初始值。
-
byte、short、int、long类型的数组元素默认的初始值为0;
-
float、double类型的数组元素默认的初始值为0.0;
-
char类型的数组元素会被统一设置为'\u0000'(即空字符)
-
-
boolean类型数据,默认值为false;
-
引用类型(String等)元素的默认值为null。
-
-
程序也可以在数组被构造之后改变数组元素值
int a[] = new int[] {1,2,4}
5.使用数组
- 引用数组的一个元素:
arrayName[index]-
下标从零开始计数。
-
数组下标必须是int , short, byte,或者char。
-
-
元素的个数即为数组的长度,可以通过arryName.length得到。
-
元素下标最大值为length - 1,如果超过最大值,将会产生数组越界异常( ArrayIndexOutOfBoundsException )
-
数组名是一个引用
public class Arrays{ public static void main(String[] args){ int[] a1 = {1,2,3,4,5}; int[] a2; a2 = a1; for(int i=0;i<a2.length;i++) a2[i]++; for(int i=0;i<a1.length;i++) System.out.println("a1["+i+"]="+a1[i]); } }
运行结果:
a1[0]=2 a1[1]=3 a1[2]=4 a1[3]=5 a1[4]=6
字符串引用构成的数组——每个元素都是引用
public class ArrayOfStringDemo{
public static void main(String[] args){
String[] anArray = {"String One","String Two","String Three"};
for(int i=0;i<anArray.length;i++){
System.out.println(anArray[i].toLowerCase());
}
}
}
运行结果:
string one string two string three
-
length是int类型,最大为:2,147,483,647。最小为0(不能存入元素,但语法正确)
public class Length{
public static void main(String[] args){
int[] a = new int[] {2147483648};
System.out.println(a.length);
}
}
运行结果:
Length.java:3: 错误: 过大的整数: 2147483648 int[] a = new int[] {2147483648}; ^ 1 个错误
-
修改数组元素的值
import java.util.Arrays;
public class Test{
public static void main(String[] args){
int[] a = new int[] {1,2,3};
a[2] = 100;
System.out.println(Arrays.toString(a));
}
}
运行结果:
[1, 2, 100]
-
复制数组或数组的部分元素
public static void arraycopy(Object source,int srclndex,Object dest,int destIndex,int length )
//复制数组或数组的部分元素
public class ArrayCopyDemo{
public static void main(String[] args){
char[] copyFrom = {'d','e','c','a','f','f','e','i','n','a','t','e','d'};
char[] copyTo = new char[7];
System.arraycopy(copyFrom,2,copyTo,0,7);
System.out.println(new String(copyTo));
}
}
运行结果:
caffein
6.多维数组
int[][] gradeTable; ...... gradeTable[0][1]为42 gradeTable[3][4]为93 gradeTable[6][2]为78
-
二维数组的声明和构造——多种方式
-
int[ ] [ ] myArray;
-
myArray是一个指向2维整数数组的引用。其初始值为null。
-
-
int[ ] [ ] myArray = new int[3] [5]
-
定义引用时,同时构造数组并初始化引用。这个数组所有元素的初始值为零。
-
-
int[ ] [ ] myArray = {{8,1,2,2,9},{1,9,4,0,3}
-
定义引用、构造数组,初始化数组元素。
-
-
二维数组的长度及每行的长度
public class UnevenExample3{
public static void main(String[] args){
//声明并构造一个2维数组
int[][] uneven = {{1,9,4},{0,2},{0,1,2,3,4}};
//数组的长度(行数)
System.out.println(uneven.length);
//数组每一行的长度(列数)
System.out.println(uneven[0].length);
System.out.println(uneven[1].length);
System.out.println(uneven[2].length);
}
}
运行结果:
3 3 2 5
int[ ] [ ]arr = new int[3] [4];
import java.util.Arrays;
public class Test{
public static void main(String[] args){
int[][] a = new int[3][4];
System.out.println(Arrays.toString(a[0]));
System.out.println(Arrays.toString(a[1]));
}
}
运行结果:
[0, 0, 0, 0] [0, 0, 0, 0]