真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中什么是可變參數(shù)-創(chuàng)新互聯(lián)

這篇文章給大家介紹Java中什么是可變參數(shù),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)徐水免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

Java 的可變參數(shù)究竟是怎么一回事?可變參數(shù)是 Java 1.5 的時(shí)候引入的功能,它允許方法使用任意多個(gè)、類型相同(is-a)的值作為參數(shù)。就像下面這樣。

public static void main(String[] args) {

print("沉");

print("沉", "默");

print("沉", "默", "王");

print("沉", "默", "王", "二");

}

public static void print(String... strs) {

for (String s : strs)

System.out.print(s);

System.out.println();

}

靜態(tài)方法 print() 就使用了可變參數(shù),所以 print("沉") 可以,print("沉", "默") 也可以,甚至 3 個(gè)、 4 個(gè)或者更多個(gè)字符串都可以作為參數(shù)傳遞給 print() 方法。

說到可變參數(shù),我想起來阿里巴巴開發(fā)手冊(cè)上有這樣一條規(guī)約。

意思就是盡量不要使用可變參數(shù),如果要用的話,可變參數(shù)必須要在參數(shù)列表的最后一位。既然坑位有限,只能在最后,那么可變參數(shù)就只能有一個(gè)(悠著點(diǎn),悠著點(diǎn))。如果可變參數(shù)不在最后一位,IDE 就會(huì)提示對(duì)應(yīng)的錯(cuò)誤,如下圖所示。

那可變參數(shù)是怎么工作的呢?

原理也很簡(jiǎn)單。當(dāng)使用可變參數(shù)的時(shí)候,實(shí)際上是先創(chuàng)建了一個(gè)數(shù)組,該數(shù)組的大小就是可變參數(shù)的個(gè)數(shù),然后將參數(shù)放入數(shù)組當(dāng)中,再將數(shù)組傳遞給被調(diào)用的方法。

這就是為什么可以使用數(shù)組作為參數(shù)來調(diào)用帶有可變參數(shù)的方法的根本原因。代碼如下所示。

public static void main(String[] args) {

print(new String[]{"沉"});

print(new String[]{"沉", "默"});

print(new String[]{"沉", "默", "王"});

print(new String[]{"沉", "默", "王", "二"});

}

public static void print(String... strs) {

for (String s : strs)

System.out.print(s);

System.out.println();

}

那如果方法的參數(shù)是一個(gè)數(shù)組,然后像使用可變參數(shù)那樣去調(diào)用方法的時(shí)候,能行得通嗎?大家感興趣的話,不妨試一試(行不通,噓)。

那一般什么時(shí)候使用可變參數(shù)呢?

可變參數(shù),可變參數(shù),顧名思義,當(dāng)一個(gè)方法需要處理任意多個(gè)相同類型的對(duì)象時(shí),就可以定義可變參數(shù)。Java 中有一個(gè)很好的例子,就是 String 類的 format() 方法,就像下面這樣。

System.out.println(String.format("年紀(jì)是: %d", 18));

System.out.println(String.format("年紀(jì)是: %d 名字是: %s", 18, "沉默王二"));

PS:%d 表示將整數(shù)格式化為 10 進(jìn)制整數(shù),%s 表示輸出字符串。

如果不使用可變參數(shù),那需要格式化的參數(shù)就必須使用“+”號(hào)操作符拼接起來了。麻煩也就惹禍上身了。

在實(shí)際的項(xiàng)目代碼中,開源包 slf4j.jar 的日志輸出就經(jīng)常要用到可變參數(shù)(log4j 就沒法使用可變參數(shù),日志中需要記錄多個(gè)參數(shù)時(shí)就痛苦不堪了)。就像下面這樣。

protected Logger logger = LoggerFactory.getLogger(getClass());

logger.debug("名字是{}", mem.getName());

logger.debug("名字是{},年紀(jì)是{}", mem.getName(), mem.getAge());

查看源碼就可以發(fā)現(xiàn),debug() 方法使用的可變參數(shù)。

public void debug(String format, Object... arguments);

那在使用可變參數(shù)的時(shí)候有什么注意事項(xiàng)嗎?

有的,有的。我們要避免重載帶有可變參數(shù)的方法——這樣很容易讓編譯器陷入自我懷疑中

public static void main(String[] args) {

print(null);

}

public static void print(String... strs) {

for (String a : strs)

System.out.print(a);

System.out.println();

}

public static void print(Integer... ints) {

for (Integer i : ints)

System.out.print(i);

System.out.println();

}

這時(shí)候,編譯器完全不知道該調(diào)用哪個(gè) print() 方法,print(String... strs) 還是 print(Integer... ints),傻傻分不清。

假如真的需要重載帶有可變參數(shù)的方法,就必須在調(diào)用方法的時(shí)候給出明確的指示,不要讓編譯器去猜。

public static void main(String[] args) {

String [] strs = null;

print(strs);

Integer [] ints = null;

print(ints);

}

public static void print(String... strs) {

}

public static void print(Integer... ints) {

}

上面這段代碼是可以編譯通過的。因?yàn)榫幾g器知道實(shí)參是 String 類型還是 Integer 類型,只不過為了運(yùn)行時(shí)不拋出 NullPointerException,兩個(gè) print() 方法的內(nèi)部要做好判空的操作。

關(guān)于Java中什么是可變參數(shù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


文章名稱:Java中什么是可變參數(shù)-創(chuàng)新互聯(lián)
URL鏈接:http://weahome.cn/article/eodsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部