O que significa 'public static void' em Java?

149

O que public static voidsignifica em Java?

Estou no processo de aprendizado. Em todos os exemplos do livro em que estou trabalhando, public static voidvem antes de qualquer método que esteja sendo usado ou criado. O que isto significa?

David
fonte

Respostas:

230

São três coisas completamente diferentes:

publicsignifica que o método é visível e pode ser chamado de outros objetos de outros tipos. Outras alternativas são private, protected, packagee package-private. Veja aqui para mais detalhes.

staticsignifica que o método está associado à classe, não a uma instância específica (objeto) dessa classe. Isso significa que você pode chamar um método estático sem criar um objeto da classe.

voidsignifica que o método não tem valor de retorno. Se o método retornasse um, intvocê escreveria em intvez de void.

A combinação dos três é mais comumente vista no mainmétodo que a maioria dos tutoriais incluirá.

Mark Byers
fonte
12
Como o questionador ainda está aprendendo: a ordem dessas palavras-chave também é importante. Todos os modificadores primeiros ( public, static, private, etc), então o tipo de retorno ( voidneste caso).
Pindatjuh
1
@ Markbyres ok eu entendo você responder, eu sei que o método principal deve ser estático, mas não tenho idéia por que é público? Existe alguma razão específica para isso?
hardik
9
o ambiente de tempo de execução java deve chamar o método principal para iniciar seu aplicativo. não podia fazer isso quando era privado.
Philipp
44

As três palavras têm significados ortogonais.

public significa que o método estará visível nas classes de outros pacotes.

staticsignifica que o método não está anexado a uma instância específica e não possui " this". É mais ou menos uma função.

voidé o tipo de retorno. Significa "este método não retorna nada".

Thomas Pornin
fonte
22

A palavra-chave pública é um especificador de acesso, que permite ao programador controlar a visibilidade dos membros da classe. Quando um membro da classe é precedido por público, esse membro pode ser acessado por código fora da classe na qual é declarado. (O oposto de público é privado, o que impede que um membro seja usado pelo código definido fora de sua classe.)

Nesse caso, main( )deve ser declarado como público, pois deve ser chamado por código fora de sua classe quando o programa for iniciado.

A palavra-chave static permite main( )ser chamada sem precisar instanciar uma instância específica da classe. Isso é necessário, pois main( )é chamado pelo interpretador Java antes de qualquer objeto ser criado.

A palavra-chave void simplesmente diz ao compilador que main( )não retorna um valor. Como você verá, os métodos também podem retornar valores.

utsav
fonte
18

Significa que:

  • public - pode ser chamado de qualquer lugar
  • static - ele não possui nenhum estado de objeto, então você pode chamá-lo sem instanciar um objeto
  • void - não retorna nada

Você pensaria que a falta de retorno significa que não está fazendo muito, mas pode estar salvando coisas no banco de dados, por exemplo.

Paul Tomblin
fonte
4

Significa três coisas.

Primeiro publicsignifica que qualquer outro objeto pode acessá-lo.

static significa que a classe em que reside não precisa ser instanciada primeiro antes que a função possa ser chamada.

void significa que a função não retorna um valor.

Como você está apenas aprendendo, não se preocupe muito com os dois primeiros até aprender sobre as aulas, e o terceiro não importará muito até você começar a escrever funções (além da principal).

O melhor conselho que recebi ao aprender a programar, e que passo adiante para você, é não se preocupar com os pequenos detalhes que você não entende imediatamente. Obtenha uma visão geral abrangente dos fundamentos e volte e se preocupe com os detalhes. O motivo é que você precisa usar algumas coisas (como public static void) nos seus primeiros programas que não podem ser realmente bem explicadas sem antes ensinar a você um monte de outras coisas. Então, por enquanto, apenas aceite que é assim que é feito e siga em frente. Você os entenderá em breve.

Aaron
fonte
3

Considerando a classe típica de nível superior. Somente modificadores de acesso público e nenhum modificador podem ser usados ​​no nível superior; portanto, você verá público ou nenhum modificador de acesso.

`static 'é usado porque você pode não ter necessidade de criar um objeto real no nível superior (mas às vezes você deseja fazê-lo, nem sempre pode ver / usar estática. Há outras razões pelas quais você não deve incluir estática também, mas este é o típico no nível superior.)

voidé usado porque geralmente você não retornará um valor do nível superior (classe). (às vezes, você deseja retornar um valor diferente de NULLnulo, nem sempre pode ser usado, especialmente no caso em que você declarou, inicializou um objeto no nível superior ao qual está atribuindo algum valor).

Disclaimer: Eu também sou um novato, por isso, se esta resposta estiver errada de alguma forma, por favor, não me pendure. Durante o dia, sou um recrutador de tecnologia, não um desenvolvedor; codificação é meu hobby. Além disso, estou sempre aberto a críticas construtivas e gosto de aprender, portanto, sinta-se à vontade para apontar quaisquer erros.

David Leak Nova Iorque NY
fonte
2
  • public significa que você pode acessar a classe de qualquer lugar da classe / objeto ou fora do pacote ou classe
  • static significa constante em que bloco de declaração usou apenas 1 vez
  • void significa nenhum tipo de retorno
Saleem Bhayo
fonte
6
Esta questão foi abordada adequadamente, talvez tente responder a novas perguntas em vez de responder a perguntas mais antigas com informações duplicadas. Obrigado.
Kev
É como explicar sobre elefantes. As pessoas tentam explicar que dependem de onde ele está. Estou feliz com todas as respostas acima, mas me pergunto como alguém pode dizer "Compre um livro para java".
Sulung Nugroho
2

Public - significa que a classe (programa) está disponível para uso por qualquer outra classe.

Static- cria uma classe. Também pode ser aplicado a variáveis ​​e métodos, tornando-os métodos / variáveis ​​de classe em vez de apenas locais para uma instância específica da classe.

Void- isso significa que nenhum produto será retornado quando a classe concluir o processamento. Compare isso com as classes auxiliares que fornecem um valor de retorno para a classe principal; elas operam como funções; estes não são nulos na declaração.

user647200
fonte
0

staticsignifica que o método está associado à classe, não a uma instância específica (objeto) dessa classe. Isso significa que você pode chamar um método estático sem criar um objeto da classe. Por causa do uso de uma staticpalavra main()- chave, seu primeiro método a ser invocado staticnão precisa de nenhum objeto para instância ... portanto, main( )é chamado pelo interpretador Java antes que qualquer objeto seja criado.

mahi
fonte