关于数组的一些笔记

一维数组
elementType[] arrayRefVar = new elementType[arraySize];
数组初始化简写操作:elementType[] arrayRefVar = {value0,value1,....,valuek};
数值型基本数据类型默认值为0,char型默认值为'\u0000',boolean型默认值为false。
使用arrayRefVar.length得到数组大小

 java支持一个简便for循环按顺序遍历整个数组:
for(elementType element: arrayRefVar){ //对arrayRefvar中每个元素element进行以下操作(注意变量element必须声明为与arrayRefVar元素相同的数据类型)
	//System.out.println(e);           //不可进行修改数组元素
}

	复制数组:
1.循环语句逐个复制,2.使用System类中静态方法arraycopy,3.使用clone方法复制数组。
System.arraycopy(src, srcPos, dest, destPos, length);//srcPos和destPos分别为源数组src和dest中的起始位置,复制元素个数由length指定
arraycopy方法没有给目标数组分配空间,复制前必须创建目标数组以及分配给它的内存空间,完成后src和dest具有相同内容且占有独立内存空间。
还可以使用方法getChars(int srcBegin, int srcEnd, char []dst, int dstBegin)将下标从srcBegin到srcEnd-1的子串复制到字符数组dst中下标从destBegin开始的位置。
例如: "csdfsfe".getChars(2, 6, dst, 4); //把"dfsf"复制到字符数组dst中下标从4开始的位置
            
数组传递给方法:  (数组在java中是对象。JVM将对象存储在一个称做堆的内存区域中,用于动态内存分配。)
.对于基本数据类型参数,传递的是实参的值。(值传递)
.对于数组类型参数,参数值是数组的引用,给方法传递的也是这个引用。(地址传递)

 Java中定义了可变长参数,允许在调用方法时传入不定长度的参数。
定义及调用:
在定义方法时,在最后一个形参后加上三点 …,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。上述定义有几个要点需要注意:
.可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数
.由于可变参数必须是最后一个参数,所以一个函数最多只能有一个可变参数
.Java的可变参数,会被编译器转型为一个数组
.变长参数在编译为字节码后,在方法签名中就是以数组形态出现的。这两个方法的签名是一致的,不能作为方法的重载。如果同时出现,是不能编译通过的。可变参数可以兼容数组,反之则不成立
public void foo(String...varargs){}
foo("arg1", "arg2", "arg3");
//上述过程和下面的调用是等价的
foo(new String[]{"arg1", "arg2", "arg3"});
使用过程中要注意的几点:
1、调用时,如果同时能匹配固定参数和可变长参数的方法,会优先匹配固定参数方法。
2、如果能同时和2个包含可变参数的方法相匹配,则编译会报错,因为编译器不知道该调用哪个方法。
3、一个方法只能有一个可变参数,且可变参数应为最后一个参数。
由于可变长参数就是被编译器转化为数组实现的,我们完全可以写成以数组做参数的形式:
public class product {
	public static int func(int[] args){
		int ret = 1;
        for(int i:args)  ret *= i;
        return ret;
     }
     public static void main(String[] args){
         System.out.println(func(new int[]{1,2,3}));
         System.out.println(func(new int[]{2,2,2,2,2,2}));
         System.out.println(func(new int[]{100,1000}));
      }
}

            
二维数组
数据类型[][] 数组名
不规则数组:各行长度不一样
new int[5][] //必须指定第一个下标
数组传递给方法:与一维数组大同小异