Public static void main(String[] args)

13 respostas
E

Bom dia galera, estou estudando java e embora seja compreensível a sintaxe ou a lógica, eu tenho tido dúvida quanto ao método principal:
public static void main(String[]) args);

eu sei que é o primeiro método a ser executado, sem ele a jvm não compila o programa, também sem que ele não retorna nenhum valor. Agora, porque ele é public, static, não poderia ser dinâmico ? Outra dúvida, String[] é um tipo de classe, mas qual é função dela ?

Galera, estou tendo aula e estou me esforçando com o livro do Deitel, mas eles não consigaram me clarear as idéias. Aqui eu tenho certeza que vocês me ajudarão !!!

Valeu galera Alto nível !!!

13 Respostas

T

Todo programa Java (em formato .class ou .jar) é executado por um programa em C++ chamado “java.exe”.
A primeira coisa que ele faz é procurar na classe que você passou como parâmetro, um método chamado “main” , que seja público (public), e que ele não precise instanciar um objeto da classe para chamar - é por isso que ele tem de ser static. Outra coisa que o programa em C++ faz é passar os argumentos da linha de comando para essa classe, nessa variável “args”. Ou seja, se você tem um programa:

java MeuTeste joao maria jose

ele chama o método “public static main” da classe MeuTeste e preenche a variável args com os seguintes valores:

args[0] = “joao”
args[1] = “maria”
args[2] = “jose”

A

Só uma outra coisa:

efcjunior:
eu sei que é o primeiro método a ser executado, sem ele a jvm não compila o programa

Compila sim! Ele não é obrigatório!

F

pafuncio:
Só uma outra coisa:

efcjunior:
eu sei que é o primeiro método a ser executado, sem ele a jvm não compila o programa

Compila sim! Ele não é obrigatório!


Exatamente, o máximo que vai ocorrer é o código não ser executado por você não ter a classe main. Casos assim vão ocorrer quando você declarar uma classe que somente vai ter as variáveis e os getters and setters dessas variáveis, por exemplo.

G

a função do String[] é poder receber n parametros de linha de comando sem um limite informado.

public static é, se a classe q contem o main precisasse de um new pra existir, quem seria a primeira a fazer o new para depois chamar a próxima.

no caso de se utilizar este é para o caso de um aplicativo que vc qr chamar o mesmo diretamente.

espero ter ajudado

[s]
baiano

E

Por exemplo, passando aquele seu programa para o java , ele ficaria assim:

public class MeuTeste

{

public static void main(String[] args)

{

System.out.println(João);

System.out.println(Maria);

System.out.println(Jose);

ou
System.out.println("João Maria Jose");

 }

}

-Então quando é necessário instanciar um objeto, o método não é Static ?
-Sem o método main ele poderá até ser compilado, mas não executado, certo ?
-Estou percebendo que eu vou ter grande dificuldade de organizar o meu raciocínio para visualizar os dados na memória. Porque eu entendi o que é instanciar um objeto, mas não sei como este objeto é estruturado na memória.

Valeu galera !!!

F

efcjunior wrote:
-Então quando é necessário instanciar um objeto, o método não é Static ?

Assim, métodos que não são static e são chamados por outros métodos static, obriga o objeto a ser instanciado (isso falando de métodos na mesma classe). Se você quer usar outro objeto você sempre vai precisar instanciá-lo. Método static é aquele método que está disponível para acesso em todo o programa mesmo não tendo sido a classe instanciada. (Obs.: pode ser que eu tenha falado besteira, conceito nunca foi meu forte, heheheheh…)

Abaixo um exemplo de um código onde você teria duas classes. Vou instanciar uma delas e alimentar os valores dela a partir da classe principal. Como você pode ver, a segunda classe não tem o método main mas compila, OK?

public class Exemplo {
	
	public static void main(String[] args) {
		Variaveis var = new Variaveis();
		//Seta os atributos da classe instanciada
		var.setIdade(22);
		var.setNome("Fabiano");
		var.setSequencia(1);

		//Imprime os atributos da classe instanciada
		System.out.println(var.getIdade());
		System.out.println(var.getNome());
		System.out.println(var.getSequencia());
	}

}

public class Variaveis {
	//Declaração das variáveis
	//Neste caso declarei-as como private
	//para fazer o chamado "encapsulamento"
	//que nada mais é do que permitir o acesso
	//aos atributos por meio dos métodos da classe
	private int sequencia;
	private String nome;
	private double idade;

	//Construtor da classe
	//Normalmente é o construtor que inicializa
	//as variáveis da classe
	public Variaveis() {
		this.sequencia = 0;
		this.nome = "";
		this.idade = 0;
	}

	//Daqui em diante ficam os getters e setters
	//que são os métodos que fazem o acesso
	//(gravação ou leitura) dos atributos da classe
	public double getIdade() {
		return idade;
	}
	public void setIdade(double idade) {
		this.idade = idade;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getSequencia() {
		return sequencia;
	}
	public void setSequencia(int sequencia) {
		this.sequencia = sequencia;
	}
}

Se você tiver mais alguma dúvida ou se não fui claro em alguma coisa, pode postar novamente.

S

efcjunior:
Bom dia galera, estou estudando java e embora seja compreensível a sintaxe ou a lógica, eu tenho tido dúvida quanto ao método principal:
public static void main(String[]) args);

eu sei que é o primeiro método a ser executado, sem ele a jvm não compila o programa, também sem que ele não retorna nenhum valor. Agora, porque ele é public, static, não poderia ser dinâmico ? Outra dúvida, String[] é um tipo de classe, mas qual é função dela ?

Galera, estou tendo aula e estou me esforçando com o livro do Deitel, mas eles não consigaram me clarear as idéias. Aqui eu tenho certeza que vocês me ajudarão !!!

Valeu galera Alto nível !!!

  1. Não é a JVM que compila, é o compilador , o javac.
  2. O compilador não tem problemas se falta um main no seu codigo. Ele aceita isso. O main não é obrigatório. Vc não consegue correr o programa sem ele, mas ele não é obrigatório do ponto de vista do compilador. Por exemplo, uma biblioteca de terceiros não tem main.

public significa que o método é acessivel de qualquer ponto do codigo.
static significa que não é necessário criar um objeto para usar esse método, ele pertence à classe e não ao objeto. Não existe tal coisa como “dinâmico”

String[] significa “array de String” os [] significam array. Array é um tipo especial de dado.

C

Poxa valeu mesmo, nem sabia que podia passar parâmetros pelo console, mas tem como passar parâmetros pelo metodo run() também?

R

Bom dia!!

O parênteses depois do identificador main indica que ele é um bloco de construção do programa, chamamos de método. Este método deve ser chamado main, caso contrário, a JVM não executará o aplicativo.

Simplificando as coisas, onde há a declaração de uma classe e a de um método , devemos saber que toda aplicação Java começa por um ponto de entrada, que é o método main.

public static void main(String[] args):
public:
Pode ser chamado por qualquer outro objeto.
static:
Ele pertence à classe e não ao objeto.
void:
Não retorna valor, quando você vai executar uma aplicação Java com o interpretador Java, você vai especificar o nome daquela classe que você quer que rode, ele vai invocar o método main() definido dentro daquela classe que você pretende rodar.
String[]:
Aceita um argumento simples: arrays de Strings.

Espero que ajude!!

Se estiver esquecendo de alguma coisa, por favor me alertem!!

[]s

R

Pessoal eu estou revivendo esse tópico pois tenho uma dúvida muito parecida:

o comando “public static void main(String [] args) { …}” tem que estar na minha classe principal, porém, eu preciso colocar essa linha nas outras classes que irão ser chamadas pela classe principal através de listeners?

D

ricksouto:
Pessoal eu estou revivendo esse tópico pois tenho uma dúvida muito parecida:

o comando “public static void main(String [] args) { …}” tem que estar na minha classe principal, porém, eu preciso colocar essa linha nas outras classes que irão ser chamadas pela classe principal através de listeners?

Não. O método main (com essa assinatura) é o ponto de entrada da aplicação. Nele que a execução começa. Suas outras classes serão normalmente usadas para construir objetos e usar seus métodos.

[]'s

R

Entendi, porém no meu caso aqui eu criei uma classe principal e logo após criei um JDialog, porém o window builder automaticamente cria essa linha de comando “public static void main…”, dai eu apaguei e deixei apenas o método construtor e dai parou de abrir o JDialog na classe principal.

R

Pessoal eu fiz um teste aqui, criei um novo frame e coloquei apenas o nome da classe e um método construtor com um jlabel, e não coloquei a linha public static void main…, dai quando eu chamei ele na classe principal abriu certinho, porém quando uso o JDialog sem o public static void main… ele não abre e ainda trava a classe principal quando tento chamá-lo.

Alguém ai sabe me dizer o porque?

Criado 9 de março de 2007
Ultima resposta 15 de dez. de 2011
Respostas 13
Participantes 10