久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3072|回復: 0
打印 上一主題 下一主題
收起左側

簡單介紹Java的不定長度參數

[復制鏈接]
跳轉到指定樓層
樓主
ID:109770 發表于 2016-3-22 19:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
先看兩個簡單的例子,來感受一下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行的方法,因為兩個方法都可以有相同的參數列表。都能精確匹配上參數列表,編譯器在這種情況下只好報出編譯不能通過的錯誤。所以在重載這樣的方法時,注意參數列表,不要使兩個方法可以有同樣的參數列表。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频在线观看一区二区三区 | 在线成人一区 | 高清欧美性猛交xxxx黑人猛交 | 午夜黄色 | aacc678成免费人电影网站 | 国产精品成人av | 日韩一级电影免费观看 | 欧美午夜精品久久久久免费视 | 欧美成人手机在线 | 国产精品美女久久久久久久久久久 | 亚洲成人精 | 成年人在线观看视频 | 精品三级在线观看 | 欧美在线一区二区三区 | 久久精品欧美一区二区三区不卡 | 日本精品一区 | av免费网| 久久久久久久久久久久久久久久久久久久 | 中文字幕第一页在线 | 婷婷久久精品一区二区 | 久久不卡日韩美女 | 亚洲精品国产偷自在线观看 | 欧美一区二区成人 | 国产伦精品一区二区三区精品视频 | 综合久| 亚洲精品乱码久久久久久按摩观 | 亚洲精品乱码 | 欧美精品久久久久久 | 欧洲妇女成人淫片aaa视频 | 国产不卡在线 | 热99在线| 久久性av | 乱码av午夜噜噜噜噜动漫 | 欧美日韩综合一区 | 亚洲欧美国产精品一区二区 | 黑人中文字幕一区二区三区 | 久久av网 | 在线欧美日韩 | 欧美精品一区在线 | 欧美成人一区二区三区片免费 | 91精品国产色综合久久 |