Existe algo como static class
em java?
Qual é o significado dessa classe. Todos os métodos da classe estática também precisam ser static
?
É necessário o contrário, que se uma classe contiver todos os métodos estáticos, a classe também deve ser estática?
Para que servem as classes estáticas?
java
static-classes
Kraken
fonte
fonte
Respostas:
Java possui classes aninhadas estáticas , mas parece que você está procurando uma classe estática de nível superior. Java não tem como tornar estática uma classe de nível superior, mas você pode simular uma classe estática como esta:
final
- Impede a extensão da classe, pois estender uma classe estática não faz sentidoprivate
- Impede a instanciação pelo código do cliente, pois não faz sentido instanciar uma classe estáticastatic
- Como a classe não pode ser instanciada, nenhum método de instância pode ser chamado ou campos de instância acessadosExemplo simples por sugestões acima:
De que servem as classes estáticas? Um bom uso de uma classe estática é na definição de classes pontuais, utilitárias e / ou de biblioteca, em que a instanciação não faria sentido. Um ótimo exemplo é a classe Math, que contém algumas constantes matemáticas, como PI e E, e simplesmente fornece cálculos matemáticos. Exigir instanciação nesse caso seria desnecessário e confuso. Veja a
Math
classe e o código fonte . Observe que éfinal
e todos os seus membros sãostatic
. Se o Java permitisse que classes de nível superior fossem declaradasstatic
, a classe Math seria realmente estática.fonte
Foo
com apenasstatic
métodos não é o mesmo questatic class Foo
Bem, o Java possui "classes aninhadas estáticas", mas não são iguais às classes estáticas do C #, se é de onde você veio. Uma classe aninhada estática é apenas uma que não tem implicitamente uma referência a uma instância da classe externa.
Classes aninhadas estáticas podem ter métodos de instância e métodos estáticos.
Não existe classe estática de nível superior em Java.
fonte
static
ao declará-las. Eles são implicitamente estáticos, pois você não precisa de referência a mais nada para construir um. Pessoalmente, acho a terminologia estática / não estática um pouco estranha para classes aninhadas de qualquer maneira ... Eu acho que seria mais simples falar sobre qual é o comportamento.Há uma classe aninhada estática , essa classe [aninhada estática] não precisa de uma instância da classe envolvente para ser instanciada.
Essas classes [aninhadas estáticas] podem acessar apenas os membros estáticos da classe anexa [já que ela não tem nenhuma referência a instâncias da classe anexa ...]
amostra de código:
fonte
Sim, há uma classe aninhada estática em java. Quando você declara estática uma classe aninhada, ela se torna automaticamente uma classe independente que pode ser instanciada sem precisar instanciar a classe externa à qual ela pertence.
Exemplo:
Como
class B
é declarado estático, você pode instanciar explicitamente como:Observe que se
class B
não foi declarado estático para torná-lo independente, uma chamada de objeto de instância teria a seguinte aparência:fonte
B b = new B();
se estivesse tentando instancia-la daA
própria classe .O que está acontecendo quando um membro dentro de um
class
é declarado comostatic
..? Esses membros podem ser acessados sem instanciar oclass
. Portanto, criar classe externa (classe de nível superior)static
não tem significado. Portanto, não é permitido.Mas você pode definir classes internas como estáticas (como membro da classe de nível superior). Em seguida, essa classe pode ser acessada sem instanciar a classe de nível superior. Considere o seguinte exemplo.
Agora, dentro de uma classe diferente
C
, a classeB
pode ser acessada sem criar uma instância da classeA
.static
as classes também podem ternon-static
membros. Somente a classe fica estática.Mas se a
static
palavra-chave for removida da classeB
, ela não poderá ser acessada diretamente sem criar uma instância deA
.Mas não podemos ter
static
membros dentro de umanon-static
classe interna.fonte
static
tem apenas um significado em java. Se algo estiverstatic
em uma classe, significa que ela pode ser acessada sem instanciar essa classe. Ele não diz nada sobre a criação de instâncias ou não ..Visto que este é o melhor resultado do Google para "classe estática java" e a melhor resposta não está aqui, achei que o adicionaria. Estou interpretando a pergunta do OP em relação às classes estáticas em C #, conhecidas como singletons no mundo Java. Para quem não sabe, em C # a palavra-chave "estática" pode ser aplicada a uma declaração de classe, o que significa que a classe resultante nunca pode ser instanciada.
Trecho de "Effective Java - Second Edition", de Joshua Bloch (amplamente considerado um dos melhores guias de estilo Java disponíveis):
Bloch, Joshua (08-05-2008). Java efetivo (Java Series) (p. 18). Pearson Education.
Eu acho que a implementação e justificativa são bastante auto-explicativas.
fonte
Uma classe pode ser estática em Java?
A resposta é SIM , podemos ter uma classe estática em java. Em java, temos variáveis estáticas exemplo , bem como métodos estáticos e também bloco estático . As classes também podem se tornar estáticas em Java.
Em java, não podemos tornar estática a classe de nível superior (externa). Somente classes aninhadas podem ser estáticas.
classe aninhada estática vs classe aninhada não estática
1) A classe estática aninhada não precisa de uma referência da classe externa, mas a classe aninhada não estática ou a classe interna requer referência da classe externa.
2) A classe interna (ou classe aninhada não estática) pode acessar membros estáticos e não estáticos da classe externa. Uma classe estática não pode acessar membros não estáticos da classe Exterior. Ele pode acessar apenas membros estáticos da classe Outer.
veja aqui: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
fonte
Classes externas não podem ser estáticas, mas classes aninhadas / internas podem ser. Isso basicamente ajuda você a usar a classe aninhada / interna sem criar uma instância da classe externa.
fonte
Em termos simples, Java suporta a declaração de uma classe para ser estática apenas para as classes internas, mas não para as classes de nível superior.
classes de nível superior: um projeto java pode conter mais de uma classe de nível superior em cada arquivo de origem java, sendo uma das classes nomeadas após o nome do arquivo. Há apenas três opções ou palavras-chave permitidas na frente das classes de nível superior, pública, abstrata e final .
Classes internas: as classes que estão dentro de uma classe de nível superior são chamadas de classes internas, que é basicamente o conceito de classes aninhadas. Classes internas podem ser estáticas . A idéia de tornar as classes internas estáticas é aproveitar a vantagem de instanciar os objetos das classes internas sem instanciar o objeto da classe de nível superior. É exatamente da mesma maneira que os métodos e variáveis estáticos trabalham dentro de uma classe de nível superior.
Portanto, o Java suporta classes estáticas no nível da classe interna (em classes aninhadas)
E o Java não suporta classes estáticas nas classes de nível superior.
Espero que isso dê uma solução mais simples para a questão do entendimento básico das classes estáticas em Java.
fonte
Java possui métodos estáticos associados a classes (por exemplo, java.lang.Math possui apenas métodos estáticos), mas a própria classe não é estática.
fonte
Você não pode usar a palavra-chave estática com uma classe, a menos que seja uma classe interna. Uma classe interna estática é uma classe aninhada que é um membro estático da classe externa. Ele pode ser acessado sem instanciar a classe externa, usando outros membros estáticos. Assim como os membros estáticos, uma classe aninhada estática não tem acesso às variáveis e métodos da instância da classe externa.
fonte
static
palavra-chave com uma classe, a menos que seja uma classe aninhada . 'Interior estático' é uma contradição em termos .Um método estático significa que ele pode ser acessado sem criar um objeto da classe, ao contrário do público:
fonte
Todas as boas respostas, mas eu não vi uma referência ao java.util.Collections que usa toneladas de classe interna estática para seus métodos de fator estático. Então adicionando o mesmo.
Adicionando um exemplo de java.util.Collections que possui várias classes internas estáticas. Classes internas são úteis para agrupar códigos que precisam ser acessados via classe externa.
Aqui está o método do fator estático na classe java.util.Collections
fonte