日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 三个点_Java,参数中的3个点

發(fā)布時(shí)間:2025/3/12 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 三个点_Java,参数中的3个点 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

是瓦拉格斯?:)

varargs是可變長(zhǎng)度參數(shù)的縮寫,它允許方法接受可變數(shù)量的參數(shù)(0或更多)。使用varargs,創(chuàng)建需要使用可變數(shù)量參數(shù)的方法變得非常簡(jiǎn)單。在Java 5中添加了變量參數(shù)的特性。

varargs語法

在數(shù)據(jù)類型之后,一個(gè)vararg由三個(gè)省略號(hào)(三個(gè)點(diǎn))組成,其一般形式是return_type?method_name(data_type?...?variableName){}

對(duì)靜脈曲張的需求

在Java 5之前,如果需要可變數(shù)量的參數(shù),有兩種方法來處理

如果一個(gè)方法可以接受的參數(shù)的最大值很小且已知,則可以創(chuàng)建該方法的重載版本。如果方法可以使用的參數(shù)的最大數(shù)量很大或/且未知,則方法是將這些參數(shù)放入數(shù)組中,并將它們傳遞給以數(shù)組為參數(shù)的方法。這兩種方法都很容易出錯(cuò)-每次都要構(gòu)造一個(gè)參數(shù)數(shù)組,而且很難維護(hù)-因?yàn)樘砑有碌膮?shù)可能會(huì)導(dǎo)致編寫一個(gè)新的重載方法。

靜脈曲張的優(yōu)點(diǎn)

提供了一個(gè)簡(jiǎn)單得多的選擇。減少代碼,因?yàn)椴恍枰帉懼剌d的方法。

靜脈曲張的例子public?class?VarargsExample?{

public?void?displayData(String?...?values){

System.out.println("Number?of?arguments?passed?"?+?values.length);

for(String?s?:?values){

System.out.println(s?+?"?");

}

}

public?static?void?main(String[]?args)?{

VarargsExample?vObj?=?new?VarargsExample();

//?four?args

vObj.displayData("var",?"args",?"are",?"passed");

//three?args

vObj.displayData("Three",?"args",?"passed");

//?no-arg

vObj.displayData();

}}OutputNumber?of?arguments?passed?4var

args

are

passed

Number?of?arguments?passed?3Three?args

passed

Number?of?arguments?passed?0

從程序中可以看出,這里使用長(zhǎng)度來查找傳遞給該方法的參數(shù)。這是可能的,因?yàn)関arargs被隱式地作為數(shù)組傳遞。任何作為varargs傳遞的參數(shù)都存儲(chǔ)在一個(gè)數(shù)組中,該數(shù)組通過給varargs的名稱來引用。在這個(gè)程序中,數(shù)組名是值。還請(qǐng)注意,方法是以不同數(shù)量的參數(shù)調(diào)用的,首先調(diào)用四個(gè)參數(shù),然后調(diào)用三個(gè)參數(shù),然后調(diào)用零參數(shù)。所有這些調(diào)用都由使用varargs的相同方法處理。

帶靜脈曲張的限制

可以在方法中使用varargs參數(shù)的其他參數(shù),但是在這種情況下,varargs參數(shù)必須是該方法聲明的最后一個(gè)參數(shù)。void?displayValues(int?a,?int?b,?int?…?values)?//?OK

void?displayValues(int?a,?int?b,?int?…?values,?int?c)?//?compiler?error

varargs的另一個(gè)限制是必須只有一個(gè)varargs參數(shù)。void?displayValues(int?a,?int?b,?int?…?values,?int?…?moreValues)?//?Compiler?error

超負(fù)荷varargs方法

可以重載接受varargs參數(shù)的方法。Varargs方法可以通過-

其vararg參數(shù)的類型可能不同。通過添加其他參數(shù)。超負(fù)荷varargs方法實(shí)例public?class?OverloadingVarargsExp?{

//?Method?which?has?string?vararg?parameter

public?void?displayData(String?...?values){

System.out.println("Number?of?arguments?passed?"?+?values.length);

for(String?s?:?values){

System.out.println(s?+?"?");

}

}

//?Method?which?has?int?vararg?parameter

public?void?displayData(int?...?values){

System.out.println("Number?of?arguments?passed?"?+?values.length);

for(int?i?:?values){

System.out.println(i?+?"?");

}

}

//?Method?with?int?vararg?and?one?more?string?parameter

public?void?displayData(String?a,?int?...?values){

System.out.println("?a?"?+?a);

System.out.println("Number?of?arguments?passed?"?+?values.length);

for(int?i?:?values){

System.out.println(i?+?"?");

}

}

public?static?void?main(String[]?args)?{

OverloadingVarargsExp?vObj?=?new?OverloadingVarargsExp();

//?four?string?args

vObj.displayData("var",?"args",?"are",?"passed");

//?two?int?args

vObj.displayData(10,?20);

//?One?String?param?and?two?int?args

vObj.displayData("Test",?20,?30);

}}OutputNumber?of?arguments?passed?4var

args

are

passed

Number?of?arguments?passed?210?20

a?TestNumber?of?arguments?passed?220?30

Varargs與超載歧義

在某些情況下,當(dāng)我們有重載varargs方法時(shí),調(diào)用可能是模棱兩可的。讓我們看看一個(gè)例子public?class?OverloadingVarargsExp?{

//?Method?which?has?string?vararg?parameter

public?void?displayData(String?...?values){

System.out.println("Number?of?arguments?passed?"?+?values.length);

for(String?s?:?values){

System.out.println(s?+?"?");

}

}

//?Method?which?has?int?vararg?parameter

public?void?displayData(int?...?values){

System.out.println("Number?of?arguments?passed?"?+?values.length);

for(int?i?:?values){

System.out.println(i?+?"?");

}

}

public?static?void?main(String[]?args)?{

OverloadingVarargsExp?vObj?=?new?OverloadingVarargsExp();

//?four?string?args

vObj.displayData("var",?"args",?"are",?"passed");

//?two?int?args

vObj.displayData(10,?20);

//?This?call?is?ambiguous

vObj.displayData();

}}

在這個(gè)程序中,當(dāng)我們?cè)跊]有任何參數(shù)的情況下調(diào)用Displaydata()方法時(shí),它會(huì)拋出錯(cuò)誤,因?yàn)榫幾g器不確定此方法調(diào)用是否用于displayData(String ... values)或displayData(int ... values)

如果我們有重載方法,其中一個(gè)方法具有vararg方法的一種類型,另一種方法有一個(gè)參數(shù),vararg參數(shù)的類型相同,那么我們也有歧義-作為Exp-displayData(int ... values)和displayData(int a, int ... values)

這兩個(gè)重載的方法總是有歧義的。

總結(jié)

以上是生活随笔為你收集整理的java 三个点_Java,参数中的3个点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。