簡體   English   中英

java中的main方法為什么接受無效的String args

[英]main method in java why Accept invalid String args

我用public static void main(String arg[])public static void main(String[] arg)創建了一個Java應用程序

但昨天我發現,如果我使用public static void main(String... args)編譯一個程序,這也完全正常。 為什么?

這是因為String...將被轉換為String[]

根據jls§8.4.1

變量arity方法的調用可能包含比形式參數更多的實際參數表達式。 將評估與變量arity參數之前的形式參數不對應的所有實際參數表達式,並將結果存儲到將傳遞給方法調用的數組中。

在Java中聲明varargs是一個編譯時錯誤:

String... abc={"abc","def"};

這是因為varargs可用作方法簽名中的最后一個參數,並且如jls中所述,將評估varargs並將結果存儲在數組中然后傳遞給方法

這是因為 ,

以任何形式寫入Datatype ... var_name只是var args

它可以接受該類型的任意數量的參數。

這樣就像Array一樣。

ex: String ... args相當於String[] args

這稱為可變長度參數,您可以使用相同的數據類型發送任意數量的參數。 可能一個問題必須出現在你的腦海中,“這些功能可以超負荷嗎?” 答案是肯定的。

該示例顯示了VARGS的工作原理



public class VarargsTest
{ // calculate average
public static double average( double... numbers )
{ double total = 0.0; // initialize total

// calculate total using the enhanced for statement
for ( double d : numbers )
total += d;

return total / numbers.length;
} // end method average
public static void main( String args[] )
{
double d1 = 10.0;
double d2 = 20.0;
double d3 = 30.0;
double d4 = 40.0;
System.out.printf( "d1 = %.1f\nd2 = %.1f\nd3 = %.1f\nd4 = %.1f\n\n", d1, d2, d3, d4 );

System.out.printf( "Average of d1 and d2 is %.1f\n",
average( d1, d2 ) );
System.out.printf( "Average of d1, d2 and d3 is %.1f\n",
average( d1, d2, d3 ) );
System.out.printf( "Average of d1, d2, d3 and d4 is %.1f\n",
average( d1, d2, d3, d4 ) );
} // end main
} // end class VarargsTest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM