久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
簡單介紹Java的不定長度參數
[打印本頁]
作者:
51黑bing
時間:
2016-3-22 19:51
標題:
簡單介紹Java的不定長度參數
先看兩個簡單的例子,來感受一下Java的不定長度參數
第一個例子:
Java代碼 收藏代碼
public class VariArgs {
public static void main(String[] args) {
test();
test("aaa");
test("aaa", "bbb");
test("aaa", "bbb", "ccc");
}
public static void test(String... args) {
System.out.println(args.getClass());
for (String arg : args) {
System.out.println(arg);
}
}
}
第二個例子:
Java代碼 收藏代碼
public class VariArgs {
public static void main(String[] args) {
test("aaa");
test("aaa", "bbb");
test("aaa", "bbb", "ccc");
}
public static void test(String arg, String... args) {
System.out.println(arg);
System.out.println("----------------");
for (String s : args) {
System.out.println(s);
}
}
}
讀者可以自己運行一下,這個不定長度參數的類型為String[],即字符串數組。
從上面可以看出,如果一個方法的參數定為不定參數的話,這個參數可以根據參數個數動態生成一個數組,然后傳入方法執行。
不過,不定參數有兩個規定:第一,方法的參數列表中最多只有一個不定長度的參數;第二,就是不定長度的數組的位置必須是最后一個參數。不然不能通過編譯。
對于第一個規定,是因為如果有多于一個不定長度的參數,當真正調用這個方法的時候,JVM、將不知道前面的不定長度參數有多長, 下一個參數是從哪里開始.
對于第二個參數也是一樣,編譯器不知道不定長度參數的長度,無法確定從哪里開始下一個參數。
以下是幾種不正確使用不定長度參數的例子,請不要這樣寫程序:
Java代碼 收藏代碼
public static void test(Object... objs, Object obj);
public static void test(Object obj1, Object... objs, Object obj2);
public static void test(Object... objs1, Object... objs2);
不定參數的方法可以重載。(大家都知道,重載就是方法名相同,而方法的參數列表不同)
下面給出重載的示例:
Java代碼 收藏代碼
public class VariArgs {
public static void main(String[] args) {
test("aaa");
test("aaa", "bbb");
test("aaa", "bbb", "ccc");
}
public static void test(Object... args) {
}
public static void test(String arg, String... args) {
}
}
讀者如果細心的話,可以看出文章開頭給出的兩個例子的區別,就是第二個例子比第一個例子的test方法的參數多出了一個String arg,從感覺上沒有太大的區別,這有點像編譯原理的*和+的區別。第一個test方法指可以有0或N個String做參數,但第二個test方法指至少一個String做為參數。
然后結合重載來看,把第一個例子和第二個例子合并成一個類,得到以下代碼:
Java代碼 收藏代碼
public class VariArgs {
public static void main(String[] args) {
test();
test("aaa");
test("aaa", "bbb");
test("aaa", "bbb", "ccc");
}
public static void test(String... args) {
System.out.println(args.getClass());
for (String arg : args) {
System.out.println(arg);
}
}
public static void test(String arg, String... args) {
System.out.println(arg);
System.out.println("----------------");
for (String s : args) {
System.out.println(s);
}
}
}
讀者可以編譯下這個程序,結果是編譯不通過。為什么呢?程序編譯到第五行時,不能確定test("aaa")該用第10行的test方法還是第17行的方法,因為兩個方法都可以有相同的參數列表。都能精確匹配上參數列表,編譯器在這種情況下只好報出編譯不能通過的錯誤。所以在重載這樣的方法時,注意參數列表,不要使兩個方法可以有同樣的參數列表。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品一区二区不卡
|
天天综合天天
|
天天干天天看
|
久久国产一区
|
国产免费av网站
|
日韩精品视频免费
|
久草网在线观看
|
日韩三级精品
|
国产91热爆ts人妖系列
|
91成人在线观看喷潮
|
午夜天堂在线
|
精品一区av
|
国产精品av一区二区
|
婷婷激情综合
|
亚洲黄色精品
|
四虎com
|
一区二区三区四区视频在线观看
|
国产精品久久免费
|
久久亚洲国产
|
国产精品成人免费视频
|
玖玖伊人
|
亚洲精品一区二区三区蜜桃久
|
久久一区精品
|
www.精品国产
|
爱爱短视频
|
xxxxx黄色
|
国产精品一级
|
婷婷丁香激情
|
黄色影视
|
欧美成人精品激情在线观看
|
色婷婷av一区二区
|
亚洲天码中字
|
69精品人人人人
|
日本黄a三级三级三级
|
亚洲另类色图
|
国产黄色大片
|
午夜婷婷
|
在线观看网址你懂的
|
成人网页
|
亚洲综合激情网
|
国产一区二区免费看
|