定义数组的三种方式

以 int型 的一维数组为例,说说三种定义方式

int[] arr = new int[3];

这是最常用的方式,定义时就含有默认值,可以后续赋值

public class Demo{            
	public static void main(String[] args){
		int[] arr = new int[3];
	}
}

int[] arr = {15,3,8};

这种定义方式易于初始化数组,数组的个数由{}内元素的个数决定

public class Demo{            
	public static void main(String[] args){
		int[] arr = {15,3,8};
	}
}

int[] arr = new int[]{15,3,8};

铛铛铛,重点讲的就是这玩意:这种方法看似麻烦,但它可以实现一个很牛逼的功能

可以匿名化的传递常量数组,这是上述两种方法办不到的,具体怎么实现,看下面代码:

public class Demo{            
	public static void main(String[] args){
		print(new int[]{15,6,8});   //没有数组名,但可以把数组作为参数传给方法;其余方法这么做只会报错
	}

	public static void print(int[] arr){
		for(int i = 0; i < arr.length; i++){
			System.out.println(arr[i]);
		}		
	}
}

java用数组请求参数路径参数 java参数为数组_匿名化传递常量数组





动态参数列表

以int类型为例来说明一下

JDk1.5版本之后,出现了一个新的写法

int ...x 这是动态参数列表(类型固定,个数可以动态 0-n都可以)
我以int类型来进行探究

不传参数的情况

public class Demo{
	
	public void test(int ...x){
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		t.test();
	}
}

可以执行

java用数组请求参数路径参数 java参数为数组_java_02

传递任意个参数

public class Demo{
	
	public void test(int ...x){
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		Demo t1 = new Demo();
		Demo t2 = new Demo();
		t.test(1,2,3,4,5);
		t1.test(5,5);
		t2.test(0);
	}
}

我随机弄啦三种参数个数,传递进去,没问题

java用数组请求参数路径参数 java参数为数组_java用数组请求参数路径参数_03

怎么用传进去的任意个参数

  • 其实,int ...xint[] x的本质是一样的,有length属性,有下标
  • 但是动态参数列表优于数组参数的地方在于,他可以传0个参数;
  • 而数组参数,传0个参数会报错

和数组参数的调用方法一样

public class Demo{
	
	public void test(int ...x){
		System.out.println("执行了test方法,携带动态参数列表");
		for(int i = 0; i < x.length; ++i){
			System.out.println(x[i]);
		}
		
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		t.test(1,2,3,4,5);
	}
}

java用数组请求参数路径参数 java参数为数组_java用数组请求参数路径参数_04

数组参数传0个参数会报错

而动态参数列表可以不传参数(最上面第一个例子有演示)

public class Demo{
	
	public void test(int[] x){
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		t.test();
	}
}

java用数组请求参数路径参数 java参数为数组_数组定义方法_05

动态参数列表涉及的重载问题

动态参数列表可以和不带参数,构成重载,但对象.方法()不带参数时调用不带参数的方法

public class Demo{
	
	public void test(int ...x){
		System.out.println("执行了test方法,携带动态参数列表");
	}
	public void test(){    
		System.out.println("执行了test方法,没有携带参数!");
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		t.test();
	}
}

java用数组请求参数路径参数 java参数为数组_java用数组请求参数路径参数_06

注意,动态参数列表和相同类型数组参数不能构成重载,他们本质是一样的,会报错(除非它们的本质维度不同,比如一个二维,一个一维)

//都对应的是一维数组


public class Demo{
	
	public void test(int ...x){
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	public void test(int[] x){
		System.out.println("执行了test方法,携带数组参数!");
		
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		t.test();
	}
}

java用数组请求参数路径参数 java参数为数组_数组定义方法_07

//都对应的是二维数组

public class Demo{
	
	public void test(int[] ...x){
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	public void test(int[][] x){
		System.out.println("执行了test方法,携带数组参数!");
		
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		t.test();
	}
}

java用数组请求参数路径参数 java参数为数组_java用数组请求参数路径参数_08

//对应的数组维度不同


public class Demo{
	
	public void test(int ...x){
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	public void test(int[][] x){
		System.out.println("执行了test方法,携带数组参数!");
		
	}
	
	public static void main(String[] args){
		Demo t = new Demo();
		t.test();
	}
}

对应的数组维度不同,这样就编译成功

java用数组请求参数路径参数 java参数为数组_System_09

动态参数列表在方法的参数中只能存在一份儿,且必须放置在方法参数的末尾

public class Demo{
	
	public void test(int a,int ...x){
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	public static void main(String[] args){
		Demo t = new Demo();
		t.test(5,6,7);
		t.test();
	}
}

java用数组请求参数路径参数 java参数为数组_匿名化传递常量数组_10

public class Demo{
	
	public void test(int ...x,int a){  //这样会报错
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	public static void main(String[] args){
		Demo t = new Demo();
		t.test(5,6,7);
	}
}

java用数组请求参数路径参数 java参数为数组_java_11

public class Demo{
	
	public void test(int ...x,int ...y){ //这样也会报错
		System.out.println("执行了test方法,携带动态参数列表");
		
	}
	public static void main(String[] args){
		Demo t = new Demo();
		t.test(5,6,7);
	}
}

java用数组请求参数路径参数 java参数为数组_java_12