Classe estática em Java
Na linguagem Java, não podemos criar uma classe externa como uma classe estática, mas existe o privilégio de criar uma classe interna aninhada como uma classe estática. As propriedades de uma classe estática são as seguintes.
Uma classe interna estática nunca pode acessar um membro não estático da classe externa.
Uma classe interna estática não precisa de nenhuma referência de classe externa para acessar as variáveis de membro.
A classe estática nunca pode ser instanciada. Portanto, os métodos são diretamente acessíveis pelo nome da classe.
Abaixo está o código que demonstra as duas linhas acima.
package static_class;
public class StaticInnerClass {
static int i = 1;
int j = 9;
public static void main(String[] args) {
StaticInnerClass s = new StaticInnerClass();
// s.InnerClass.printNum();
InnerClass.printNum();
}
public static class InnerClass {
public static void printNum() {
System.out.println(i);
// System.out.println(j);
}
}
}
No código acima, criamos uma classe externa com o nome StaticInnerClass
. Esta classe possui um campo estático, um campo não estático, um método estático e uma classe interna estática. No método main estático, criamos uma instância de uma classe externa chamada objeto s
. Quando tentamos acessar o método printNum()
da classe interna com um objeto de classe externa, isto é, s.InnerClass.printNum();
IDE fornece um erro em tempo de compilação, que afirma que a classe interna estática não precisa de nenhuma referência do objeto de referência da classe externa para acessar os métodos da classe interna. Portanto, podemos acessar diretamente os métodos da classe interna pelo nome da classe.
Agora, quando vemos a definição do método printNum()
. Possui duas instruções de impressão. Primeiro imprime o campo estático da classe externa e, segundo, tenta imprimir a variável não estática da mesma. A declaração System.out.println(i);
é válido, o que significa que só se pode acessar membros estáticos do contexto estático. Mas olhando para a segunda declaração, System.out.println(j);
é inválido, pois nunca se pode acessar membros não estáticos do contexto estático.
Na classe Java, não há possibilidade de criar uma classe externa static
. Mas, podemos imitar o comportamento usando algumas palavras-chave definidas.
O uso da palavra-chave final
é para tornar a aula final. Esta palavra-chave proíbe a extensão da classe. A razão é que não há uso na extensão de uma classe estática.
Use a palavra-chave private
para tornar o construtor privado, pois isso impede a instanciação de uma classe estática. Como diz a propriedade da classe estática, nunca se pode instanciá-la.
Use a palavra-chave static
com variáveis de membro e métodos de membro. Visto que nenhum objeto é criado, nunca se pode acessar funções e campos de membros não estáticos.
Abaixo está uma classe estática definida e seu uso encontra na criação da classe Utility
, onde a criação de objeto desta classe não é necessária.
package static_class;
public final class StaticClass {
private static int a = 1;
private StaticClass() {
System.out.println("Cannot be instantiated");
}
public static void printNum() {
System.out.println(a);
}
}
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn