数组动态初始化( 声明并开辟数组):
数据类型[] 数组名称 = new 数据类型 [⻓度] ;int[] arr=new int[3];
1.数组的访问 注意:数组从0开始,因此可以访问范围就是0~数组长度-1;假设现在开辟了3个空间的数组,那么可以访问的是:0、1、2。
如果访问超过数组长度,会产生"java.lang.ArrayIndexOutOfBoundsException"异常信息。
2.当数组采⽤动态初始化开辟空间之后,数组之中的每个元素都是该数据类型的默认值;
3.数组本身是⼀个有序的集合操作,所以对于数组的内容操作往往采⽤循环的模式完成。(数组是⼀个有限的集合,采⽤for循环);
4.在Java中有⼀种动态取得数组⻓度的⽅法:数组名称.length;
**注意:**数组属于引⽤数据类型,因此在使⽤之前⼀定要开辟空间(实例化),否则就会产⽣NullPoninterException
数组静态初始化:
简化格式:数据类型[] 数组名称 = {值,值,…};
完整格式:数据类型[] 数组名称 = new 数据类型[] {值,值,…};
数组作为引⽤数据类型,也⼀定可以发⽣引⽤传递。
引⽤传递空间:同⼀块堆内存空间可以被不同的栈内存所指向。
数组的拷贝:
for 、 clone 、Array.copyof(原数组,目标数组长度)、System.arraycopy(原数组,起始位置,目标数组,目标数组起始点,拷贝长度);
System.arraycopy() 、Array.copyof()、 clone、for循环拷贝对于基本类型来说他是深拷贝
array2=array.clone()
native标志了System.arraycopy()拷贝最快 底层代码由c/c++
4种拷贝方式对于引用类型来说都是浅拷贝
数组的数组就是二维数组
定义一个二维数组 (数组并不是等列数组 非矩阵)
public static void main(String[] args) {
int[][] data = new int[][] { {1,2,3},{4,5},{6,7,8,9} };
for (int x = 0; x<data.length ; x++)
{ for (int y = 0; y<data[x].length ; y ++)
{ System.out.println("data{"+x+"] ["+y+"]="+data[x][y]+"̵") ; }
System.out.println(); } } }
Java中实现数组排序: java.util.Arrays.sort(arrayName) ;
public class ArrayDemo{
public static void main(String[] args) {
int[] intData = new int[]{1,65,55,23,100} ;
char[] charData = new char[]{'z','a','c','b'} ;
java.util.Arrays.sort(intData) ;
java.util.Arrays.sort(charData) ;
printArray(intData) ;
printArray(charData) ;
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ; }
System.out.println() ; }
public static void printArray(char[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ; }
System.out.println() ; } }
对象数组
上面介绍的都是基本类型的数组,对象数组往往是以引⽤数据类型为主的定义,例如:类、接口。
对象数组的初始化也分为动态初始化
``动态初始化
class Person {
private String name ;
private int age ;
public Person(String name, int age) {
this.name = name ;
this.age = age ;
}
public void getInfo() {
System.out.println("姓名"+this.name+",年龄"+this.age) ;
}
}
public class Test {
public static void main(String[] args){
Person[] per = new Person[3] ; // 动态初始化,每个元素都是对应数据类型的默认值
per[0] = new Person("张三",1) ;
per[1] = new Person(“李四",2) ;
per[2] = new Person("王五",3) ;
for (int x = 0 ; x < per.length ; x++) {
per[x].getInfo() ;
}
}
}
静态初始化
class Person {
private String name ;
private int age ;
public Person(String name, int age) {
this.name = name ;
this.age = age ;
}
public void getInfo() {
System.out.println("姓名"+this.name+",年龄"+this.age) ;
}
}
public class Test {
public static void main(String[] args){
Person[] per = new Person[] {
new Person("张三",1) ,
new Person("李四",2) ,
new Person("王五",3)
} ; // 静态初始化
for (int x = 0 ; x < per.length ; x++) {
per[x].getInfo() ;
}
}
}