java 数组
定义数组的三种方式
以 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]);
}
}
}
动态参数列表
以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();
}
}
可以执行
传递任意个参数
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);
}
}
我随机弄啦三种参数个数,传递进去,没问题
怎么用传进去的任意个参数
- 其实,
int ...x
与int[] 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);
}
}
数组参数传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();
}
}
动态参数列表涉及的重载问题
动态参数列表可以和不带参数,构成重载,但对象.方法()不带参数时调用不带参数的方法
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();
}
}
注意,动态参数列表和相同类型数组参数不能构成重载,他们本质是一样的,会报错(除非它们的本质维度不同,比如一个二维,一个一维)
//都对应的是一维数组
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();
}
}
//都对应的是二维数组
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();
}
}
//对应的数组维度不同
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();
}
}
对应的数组维度不同,这样就编译成功
动态参数列表在方法的参数中只能存在一份儿,且必须放置在方法参数的末尾
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();
}
}
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);
}
}
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);
}
}
文章最后发布于: 2019-03-16 18:04:36
相关阅读
1、软文公信力好: 软文发布都是选择有名气、高权重、有权威的平台,背后运营的都是大企业,有公信力所在,在这有权的平台发布的软文,那自
java将“2018年4月8日”转换成正常日期:2018年04月08日
String old_time="2018年4月8日"; String new_time=getNewTime(old_time); //转换日期 public String getNewTime(String content
请问“javascript:;”是什么意思? 最佳答案就是 执行一段 空白JAVASCRIPT语句 并且返回的也是空或者false值..把 javascript:; 加
JAVA对接CC视频的API 点播的接口文档 直播的接口文档 对接流程: 1.HTTP通信加密实现: CC视频接口的请求参数hash需要由其它请
《深入拆解Java虚拟机》学习笔记专栏地址:http://gk.link/a/1018S Java 技术体系结构 Java虚拟机(Java Virtual Machine 简称 JVM)是