JDKの日本語ドキュメントにはVarargsのことを「変数引数」と訳してあるのですが、普通は「可変引数」って言いますよね。このあたりの用語にはもう少し皆真剣に考えて使ってほしいなと思います。で、Varargsですが、これは要するにC言語のprintfのようなメソッドを作るために導入されたものだ、と言い切ってしまいましょう。コアのクラスとしてはjava.text.MessageFormatクラスのformatメソッドで可変引数が使えるようになりました。
可変引数は定義する側、使う側双方で注意が必要です。引数が固定のメソッドと異なり、引数の数がシグネチャ-からだけでは判定できません。この点は特にチームでプログラムを開発する場合に注意が必要です。安易な利用は控えるべきだと思います。
さて、定義する場合の記法が文法上新たに導入されました。
public void printArgs(int n, String... args) { // なんだかんだという風に、引数の並びのクラス名の後ろに ... を記述することで、可変引数であることを指定します。可変引数にできるのは一番後ろの引数だけです(やむをえないものの、美しくは無いですね)。
...の部分は定義側では配列と同じです。つまり、
public void printArgs(int n, String[] args) { // なんだかんだと定義しているのと同じだと思ってコードを書くことができます。
呼び出し側でも配列だと思って呼び出せば従来通りですが、引数を並べて記述することもできる、というのが新しい点です。
printArgs(101, "hoge", "gero", "baka");という呼び出し方ができます。意味は、
String[] array = {"hoge", "gero", "baka"}; printArgs(101, array);というのと同じになります。
Varargsは使いようによってはコードの記述量を減らすことができます。ただ見た目の曖昧さが増すので、積極的に使うというものではないと思います。