Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

public static void main(String[] args)

Sabemos que public static void main(String[] args) é necessário para indicar o método main da classe. Sabemos também que static é porque é um método que pertence a classe. Mas porque esse método tem que pertencer a classe?Pq nao poderia seria pertencer aos objetos?

Outra questão é sobre o String[] args para que é obrigatório esse array se na maioria dos casos não queremos passar parametros ao método main?

3 respostas
solução!

Olá Lorran, utilizando como fonte o livro Java The Complete Reference, Ninth Edition, eu fui capaz de encontrar algumas respostas para suas perguntas.

porque esse método tem que pertencer a classe?Pq nao poderia seria pertencer aos objetos?

Na página 25 ele fala que o uso da palavra static permite que o método main() seja chamado sem que haja nenhuma instância em particular da classe já criada. Que isso é necessário pois o main() é chamado pela JVM antes que qualquer objeto seja construído.

De novo ainda falando sobre a keyword static, na página 145 ele fala que quando um membro é declarado como estático ele pode ser acessado antes que qualquer objeto desta classe tenha sido criado, e sem qualquer referência a qualquer objeto.

É por essa motivação que o método main precisa ser declarado como static pois a JVM começa a execução da classe por ele.

Outra questão é sobre o String[] args para que é obrigatório esse array se na maioria dos casos não queremos passar parametros ao método main?

Na mesma página 25 ele também comenta sobre isso. Ele cita novamente que o método main() é o método chamado pelo Java quando a aplicação começa, e que qualquer informação que você precise passar para um método qualquer é recebida por variáveis dentro dos parenteses, e que mesmo que não seja preciso passar nenhum parâmetro para esse método você ainda precisa incluir os ().

Ocorre que no método main( ), existe apenas um parâmetro, embora complicado ("albeit a complicated one"), conforme está no livro.

String args[] declara um parâmetro nomeado args, que é um array de instâncias da classe String. args recebe qualquer argumento passado na linha comando quando o programa é executado.

Eu sei que a sua pergunta pra que esse array é obrigatório e não o que é ele, mas eu quis colocar a explicação acima porque eu acho que agora então fica mais fácil de entender e aí vem minha dedução. Creio que seja para quando for necessário se receber argumentos. Apenas isso! É como ele diz logo abaixo no livro: "This program does not make use of this information, but other programs shown later in this book will". (i.e ele está falando de um exemplo de código dado, que não fazia uso do array mas que outros programas podem fazer).

Eu poderia colocar aqui toda a informação na íntegra em inglês, mas creio que você pode ter acesso ao livro de alguma forma! Mas eu coloquei aí meu caro da forma mais clara que eu consegui!

Abraço!

Lorran,

Acredito que pela simplicidade, pois primeiramente seria necessário instanciar uma classe apenas para que o método que inicia a aplicação pudesse ser executado. Além disso, como construtores podem ser sobrecarregados, uma complexidade adicional seria necessária a fim de determinar como invocar o método main. Enfim, muitas verificações seriam necessárias antes de chamar o método principal.

Também pela simplicidade. Caso não fosse obrigatório, seria necessário criar uma sobrecarga do método que não receberia parâmetros de entrada, o que implicaria em mais trabalho para a JVM a fim de decidir qual método seria chamado.

Esse método é o que faz o seu programa rodar. Caso tente executar seu programa por linha de comando com "javac", ele procura esse método para iniciar o programa. O "String[] args" é a entrada de argumentos para execução do programa, por exemplo, caso vc queira passar um array de string para fazer tratamento no seu programa basta executar da seguinte forma: "javac Programa.java palavra1 palavra2". No programa vc pode iterar o array de string e capturar as strings palavra1 e palavra2 passadas como argumento.