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 !!!
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:
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!
Fabiano
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.
georgesq
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
efcjunior
Por exemplo, passando aquele seu programa para o java , ele ficaria assim:
-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 !!!
Fabiano
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?
publicclassExemplo{publicstaticvoidmain(String[]args){Variaveisvar= newVariaveis();//Seta os atributos da classe instanciadavar.setIdade(22);var.setNome("Fabiano");var.setSequencia(1);//Imprime os atributos da classe instanciadaSystem.out.println(var.getIdade());System.out.println(var.getNome());System.out.println(var.getSequencia());}}publicclassVariaveis{//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 classeprivateintsequencia;privateStringnome;privatedoubleidade;//Construtor da classe//Normalmente é o construtor que inicializa//as variáveis da classepublicVariaveis(){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 classepublicdoublegetIdade(){returnidade;}publicvoidsetIdade(doubleidade){this.idade=idade;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicintgetSequencia(){returnsequencia;}publicvoidsetSequencia(intsequencia){this.sequencia=sequencia;}}
Se você tiver mais alguma dúvida ou se não fui claro em alguma coisa, pode postar novamente.
sergiotaborda
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 !!!
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.
cesarbruno16
Poxa valeu mesmo, nem sabia que podia passar parâmetros pelo console, mas tem como passar parâmetros pelo metodo run() também?
Rachel_da_Silveira_C
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
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?
davidbuzatto
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
ricksouto
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
ricksouto
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.