1 数组
数组:用于存储数据,将相同类型的若干数据组织起来,即数组是若干相同类型数据的集合。每一个数据成为一个元素,每个元素可以通过一个索引(下标)来访问。
如果数组只声明,没有初始化,则这个数组相当于没有定义。
数组的声明和创建:
int[] arr=new int[4]
数组有默认的初始化值:
基本数据类型:byte, short, int, long是0; float, double是0.0;char是‘\u0000’;Boolean是false。
引用数据类型:null。
new创建的对象放在堆里,局部变量、形参是放在栈里。
数组的特点:
(1)长度是确定的。数组一旦被创建,大小是不可变的。
(2)数组元素必须是相同类型,不能是混合类型。
(3)数组类型可以是任何数据类型。
(4)数组是有索引的,索引从0开始到length-1结束。
(5)数组变量属于引用类型,数组也是对象。数组中的每个元素相当于该对象的成员变量。JAVA中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。
数组的初始化
静态初始化:除了用new关键字来产生数组外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
int[] arr={1,2,3,4,5};
int[] arr=new int[]{1,2,3,4,5};
动态初始化:数组定义与为数组元素分配空间并赋值的操作分开进行。
int[] arr = new int[3];
arr[0]=1;
默认初始化:数组一经分配空i教案,其中每个元素也被按照实例变量同样的方式被隐式初始化。
int[] arr={1,2,3,4,5}
for(int i=2;i<arr.length-1;i++){
arr[i]=arr[i+1];
}
arr[length-1]=0;
Arrays类
Arrays.sort(arr); //排序
Arrays.binarySearch(arr,2);//二分查找,找到元素2的索引
int[] newArr = Arrays.copyOf(arr,4);//复制数组的前四个元素
int[] newArr1 = Arrays.copyOfRange(arr,1,4);//索引值范围1到4复制数组arr,左包含,右不包含
Arrays.equals(arr1,arr2);//比较两个数组中每个元素是否相同,返回布尔值
arr1==arr2;//比较左右两侧的值是否相等,这里是比较地址,一定不同
Arrays.fill(arr,10);//将arr中的每个元素填充为10
Arrays.toString(arr);//将数组转换为一个字符串
数组的复制
除了Arrays.copyOf方法,还有System.arraycopy方法。(深拷贝)
System.arraycopy(arr,0,arrCopy,0,arr.length);
二维数组
int[][] arr; 定义了一个数组,名字叫arr。
堆空间中每个“格子”中放入的数据都是int[]类型的。
以上即为二位数组,实际上本质上都是一维数组。
int[][] arr = new int[3][]; //本质上定义了一个一维数组,长度为3,其中每个元素都是一维数组
int[] a1={1,2,3};
arr[0]=a1;
arr[1]=new int[]{2,3,4};
arr[2]=new int[]{4,5,6};
for(int i=0;i<3;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(arr[i]a[j]);
}
System.out.println();
}
for(int[] a:arr){
for(int b:a){
System.out.println(b);
}
System.out.println();
}
二维数组初始化:
静态初始化:
int[][] arr={{1,2},{3,4},{5,6,7}};
int[][] arr=new int[][]{{1,2},{3,4},{5,6,7}};
动态初始化:
int[][] arr=new int[3][2];
//本质上定义一个一维数组,长度为3.
//每个元素是一个长度为2的数组。这里的2只针对初始而言,重新赋值一个更长的数组也可以。
arr[0]=new int[]{1,2};
arr[1]=new int[]{1,3,3};
arr[2]=new int[]{4,5};
默认初始化:
int[][] arr=new int[3][2];
//定义一个一维数组,长度为3。
//每个元素初始化为0构成的数组,每个元素是一个长度为2的数组。
2 main方法
main方法是程序的入口,在同一类中,如果有多个方法,虚拟机就会识别main方法,从这个方法作为程序的而主入口。
public static void main(String[] args){}
String[] args 实参是什么?
通过System.out.println(args.length)得到结果为0,可知args是String数组,相当于String[] args=new String[0]。所以默认情况下,虚拟机在调用main方法的时候是传入了一个长度为0的数组。可以手动输入传入参数。