Public static void main(String... args)

16 respostas
H

Pessoal,

estava vendo um tutorial sobre reflection no site da Sun…

e num dos exemplos está a seguinte assinatura do metodo main…

public static void main(String… args)

eu testei e rodou normalmente…
o que é esse (String… args)

alguém sabe me explicar, pois nunca havia visto isso.

Valew!!

16 Respostas

neohacker

isso é o Varargs…
onde vc tem nos parametros do seus métodos a opção de passar quantos elementos do mesmo tipo para ele.
Simples exemplo:

public calculaMedia(int... nota) { ... }

aqui vc pode passar quantas notas vc quiser…
um jeito bem simples de fazer média

H

valew neohacker!!!

agora eu entendi…

obrigado.

neohacker

Só completando um pouco mais vc poderá (recomendado) usar o For Avançado (não sei o nome em Inglês) como simples exemplo:

for(double element : nota) {
...
}
LPJava

esse recurso so existe no java 5, chamado de vargs… onde pode receber de 0 a muitos valores… veja um exemplo:

class Var{
public static void main(String args[]){
metodo(2,3,5,20);
}
static void metodo(int...num){}
}
A

só pra complementar… iso é válido no main() porque só temos isso lá e também foi válido pras notas porque so temos isso la tbem… mas se vc tiver metodos com vários argumentos… so vai funcionar se isso for o último argumento…

cuidado…esse tipo de situação cai corriqueiramente nas provas da SUN pra ver se vc tá ligado… ta ligado…

neohacker

arbonan:
só pra complementar… iso é válido no main() porque só temos isso lá e também foi válido pras notas porque so temos isso la tbem… mas se vc tiver metodos com vários argumentos… so vai funcionar se isso for o último argumento…

cuidado…esse tipo de situação cai corriqueiramente nas provas da SUN pra ver se vc tá ligado… ta ligado…

Bem observado :!:
Esqueci de comentar, isso mesmo ele deve ser o último argumento do seu método

fabiozoroastro

NeoHacker:

ForEach :slight_smile:

neohacker

fabiozoroastro:
NeoHacker:

ForEach :)

Vlw fabiozoroastro :smiley:

Agora vou lembrar

ViniGodoy

Isso também funciona pq o var args é implementado como um truque de compilação…

Depois de compilado o código

public static void main(String … args)

vai se transformar em

public static void main(String[] args)

Opa! Essa última assinatura você já conhece! :slight_smile:

Y

fabiozoroastro:
NeoHacker:

ForEach :)

Cara, só uma observação: acho que ForEach é uma forma genérica de chamar o loop que percorre implicitamente uma coleção/arranjo/vetor.

O nome do recurso no Java costuma-se ser referenciado como Enhanced For.

flws

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/for.html

ViniGodoy

O vararg só pode ser o último argumento para evitar ambiguidades na sintaxe.

Dê uma olhada no método

public void umMetodo(String x, String ... qualquerCoisa) { }

Agora olha esse aqui:

public void umMetodo(String ... qualquerCoisa, String x) { }

Como o java saberia, no segundo caso, quando chegou a hora da variável x? Seria a última da lista?

Para evitar confusão (e talvez que também para manter a sintaxe parecida com o C++, o que é uma premissa desde o início do Java), o vararg ficou restrito ao último argumento.

Para o compilador não haveria mesmo muita diferença. No final das contas, tudo é substituído por arrays de objetos. Se fosse diferente, código com vararg não seria compatível com versões anteriores, e o código é.

neohacker

Yky Mattshawn:
fabiozoroastro:
NeoHacker:

ForEach :)

Cara, só uma observação: acho que ForEach é uma forma genérica de chamar o loop que percorre implicitamente uma coleção/arranjo/vetor.

O nome do recurso no Java costuma-se ser referenciado como Enhanced For.

flws

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/for.html

É acho que era esse o nome que eu queria msm, mas nem me lembrava (é muito dificil falar isso :lol: )

Marck

Surgiu dúvida:
não sou obrigado a passar pelo menos 1 argumento?

Marck

[edit] me enganei…olhei no livro, vc esta certo… :stuck_out_tongue: [edit]

LPJava

nao é obrigado a passar valor nao… ele compila tranquilo eh de 0 a muitos valores
veja:

class Var{
static void metodo(int...args){}
public static void main(String ar[]){
metodo();
}}

isso compila nao passei nenhum valor… é valido para vargs

peerless

Isso é util para não precisar instanciar e/ou inicializar… um array para então, passar como argumento.

Em tempo :

String [] meuArray = {JTcod.getText(), JTnome.getText(), JTtelefone.getText()}; meuMetodo(meuArray);

Ficaria:

meuMetodo(JTcod.getText(), JTnome.getText(), JTtelefone.getText());
Mantu

Aprofundando um pouco mais:
http://www.guj.com.br/posts/list/0/52538.java#276862

Criado 4 de maio de 2007
Ultima resposta 7 de mai. de 2007
Respostas 16
Participantes 10