[DUVIDA] método main

Porque o metodo main é compilado sem o “static” e quando roda da erro?

//programa em Java public class MeuPrograma { public void main(String[] args){ System.out.println("Jesus vai me ensinar a programar em Java!! \n\n Porque Jesus é o caminho a verdade e a vida!"); } }

[quote=xwillianss]Porque o metodo main é compilado sem o “static” e quando roda da erro?

//programa em Java public class MeuPrograma { public void main(String[] args){ System.out.println("Jesus vai me ensinar a programar em Java!! \n\n Porque Jesus é o caminho a verdade e a vida!"); } }[/quote]

Pq independente de quantos objetos existirem dessa sua classe, é o método main estatico da CLASSE que sempre será executado…

Vai dar erro porque o método main é estático porque está disponíveis para a execução sem uma instância do objeto. Portanto sem ele teria que ser instanciado.

Ele é compilado porque não há nenhum erro de sintaxe em escrever public void main(String args[]).
Vc está declarando um método normal com o nome main.

Mas quando vc vai executar a classe, a JVM procura pelo método public static void main(String args[]) e não encontra, por isso dá erro …

Não é um erro de sintaxe, não tem problemas ao ser compilado.

É um erro de semântica, não roda pois não tem Sentido.

[quote=rafael_queiroz]Não é um erro de sintaxe, não tem problemas ao ser compilado.

É um erro de semântica, não roda pois não tem Sentido.[/quote]
Como não tem sentido?
Quer dizer então que eu não posso criar um método chamado main indepedente dele ser executável ou não? Neste caso eu não posso criar dois métodos main na mesma classe?
Confesso que fiquei confuso agora! :smiley:
Neste caso método estáticos são métodos que não precisam ser instanciados? :roll:

Não faz sentido, pois o método “main” deve ser estatico para rodar, ou seja, no javac OK, sintaxe OK, no java NÃO, semântica NÃO.
Sim, você pode criar mais de um método “main”, mas o executável será o “void” “estático”, porque métodos estáticos não precissam ser instaciado para funcionar, o executável tenta acessar MeuPrograma::main(); e não MeuPrograma programa= new MeuPrograma(); programa.main();

Rodar o método estático main de dada assinatura quando vc invoca uma classe através do executavel java é convenção.

Se não for estático, significa que deve ser criada uma instância do classe. Que construtor usar? O padrão? E se o objeto for de criação complexa, levando ao uso de fabricas, ou não fizer sentido, como um caso de uma classe de teste que lê 2 inteiros da stdin e retorna a soma deles? No fim das contas o uso do main static faz mais sentido :wink: