public static void main(String[] args)  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
efcjunior
Virtual Machine Man

Membro desde: 14/12/2006 20:38:28
Mensagens: 520
Offline

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 !!!!

Sun Certified Java Programmer 98%
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline


public, static, não poderia ser dinâmico?


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"

[WWW]
Adriano Almeida
JavaEvangelist
[Avatar]

Membro desde: 13/09/2006 15:29:34
Mensagens: 386
Offline

Só uma outra coisa:

efcjunior wrote: 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!

Twitter: @adrianoalmeida7
http://ahalmeida.com
http://blog.caelum.com.br

Fabiano
JavaBaby
[Avatar]

Membro desde: 21/07/2003 08:37:12
Mensagens: 77
Localização: Joinville/SC
Offline

pafuncio wrote:Só uma outra coisa:

efcjunior wrote: 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.
[ICQ]
georgesq
JavaGuru
[Avatar]

Membro desde: 09/12/2002 12:25:25
Mensagens: 208
Localização: SP
Offline

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

SCJP 1.5
[MSN] [ICQ]
efcjunior
Virtual Machine Man

Membro desde: 14/12/2006 20:38:28
Mensagens: 520
Offline

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 !!!

Sun Certified Java Programmer 98%
Fabiano
JavaBaby
[Avatar]

Membro desde: 21/07/2003 08:37:12
Mensagens: 77
Localização: Joinville/SC
Offline

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?

Se você tiver mais alguma dúvida ou se não fui claro em alguma coisa, pode postar novamente.
[ICQ]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

efcjunior wrote: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.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
cesarbruno16
Debugger
[Avatar]

Membro desde: 25/05/2010 02:31:51
Mensagens: 50
Localização: Recife - PE
Offline

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

This message was edited 1 time. Last update was at 29/09/2011 21:46:56


Você veio sem pedir e vai embora sem querer, então a ti basta somente aguentar o que é passageiro! "living at codes!"
=======================================================
[]Bruno César de Andrade
Desenvolvedor de Softwares
e-Mail: bruno.andrade@pitang.com
----------------------------------------------------------------------------------------
"O segredo do Sucesso é a constância do propósito"
[Email] [WWW] [MSN]
Rachel da Silveira Campos
JavaTeenager
[Avatar]

Membro desde: 20/08/2010 10:19:23
Mensagens: 162
Localização: São Paulo
Offline

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



This message was edited 1 time. Last update was at 04/10/2011 07:46:40


www.queldevelopj.wordpress.com
ricksouto
Thread.start()

Membro desde: 01/06/2011 13:16:56
Mensagens: 42
Offline

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
Moderador
[Avatar]

Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline

ricksouto wrote: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

Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."

http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm
[WWW]
ricksouto
Thread.start()

Membro desde: 01/06/2011 13:16:56
Mensagens: 42
Offline

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.
ricksouto
Thread.start()

Membro desde: 01/06/2011 13:16:56
Mensagens: 42
Offline

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?
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team