作者TonyQ (骨头)
看板java
标题[闲聊] 1.5 出现的多重参数
时间Wed May 16 19:45:24 2007
很久以前就知道的东西 , 不过一直没有机会拿出来用 ,
加上是限定 1.5 以後才有的新特性 .....
不过既然最近会用到,拿来说嘴一下也好。:P
举例来说
static void test(
String... mys){ //这三个点就是神奇的地方了
}
这就是一个最简单的宣告式
────────────────────────────────
这有甚麽用途呢
我们继续看下去
首先是这行
System.out.println(mys.getClass().getSimpleName());
这可以告诉我们传进来的mys这东西是甚麽型态
哦 原来是 String[]
────────────────────────────────
咦 既然是阵列 那为甚麽不写 String[] ??
再卖关子就没意义了 :P
看了底下的test code自然会明白的
这是测试用范例
static void test(String... mys){
System.out.println(mys.length);
System.out.println(mys[0]);
System.out.println(mys[2]);
System.out.println(mys[4]);
}
──首先试试来当阵列用─────────────────────
String[] hi=new String[]{"1","2","3"};
test(hi);
3
1
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at PracticeOnly.test(PracticeOnly.java:35)
at PracticeOnly.main(PracticeOnly.java:23)
Press any key to continue...
嗯 阵列很正常 连索引值超过的例外都很正常
──接着拿来来恶搞一些东西───────────────────
test("hi"); //咦 搞甚麽 这样编译竟然会过!?
1
hi
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at PracticeOnly.test(PracticeOnly.java:32)
at PracticeOnly.main(PracticeOnly.java:22)
Press any key to continue...
────────────────────────────────
test("hi","h2","hi3","hi4"); //咦 搞错method了吧???
4
hi
hi3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at PracticeOnly.test(PracticeOnly.java:34)
at PracticeOnly.main(PracticeOnly.java:22)
Press any key to continue...
────────────────────────────────
看完上面应该能了解它是干麻的了...
简单来说,这个东西就是多重参数的输入,
最有可能看到他的就是format的部份。
比方说printf , String.format ()
它可以输入String[] ,也可以分开输入很多个String 。
最後它会把他们搞成一个String[]。
但是不能先String[]後String 或者先String後Strnig[]
ex.
String[] s=new String[]{"hi5","hi6","hi7"};
test(s,"hi","h2","hi3","hi4");
这样编译是不会过的
它还有一些限制是
必须是该method顺序上最後一个parameter,而且每个method只能有一个。
除了printf以外,大概就只能拿来恶搞用了吧
很少看到有人在提它,就拿出来说嘴一下 ̄▽ ̄||
用的时候要小心一件事情就是overloading
ex. 如果丢test("hi","hi2")给底下的环境,
是test(String ,String)会吃走喔...
static void test(String mys,String hi){
System.out.println(mys);
}
static void test(String... mys){
System.out.println(mys.length);
System.out.println(mys[0]);
System.out.println(mys[2]);
System.out.println(mys[4]);
}
---
如果有人知道这有甚麽其他用途的话,倒是希望不吝分享一下...XD
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.139.147.114
※ 编辑: TonyQ 来自: 220.139.147.114 (05/16 19:50)
1F:推 PsMonkey:这篇是要不要收啊 @_@ 好鸡肋语法... [殴飞] 05/16 21:44