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 !!!
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”
Só uma outra coisa:
[quote=efcjunior] eu sei que é o primeiro método a ser executado, sem ele a jvm não compila o programa
[/quote]
Compila sim! Ele não é obrigatório!
[quote=pafuncio]Só uma outra coisa:
[quote=efcjunior] eu sei que é o primeiro método a ser executado, sem ele a jvm não compila o programa
[/quote]
Compila sim! Ele não é obrigatório![/quote]
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.
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
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 !!!
[quote]efcjunior wrote:
-Então quando é necessário instanciar um objeto, o método não é Static ?[/quote]
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.
[quote=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 !!![/quote]
- Não é a JVM que compila, é o compilador , o javac.
- 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.
Poxa valeu mesmo, nem sabia que podia passar parâmetros pelo console, mas tem como passar parâmetros pelo metodo run() também?
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
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?
[quote=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?[/quote]
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
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.
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?