HOWTO · Java
O que significa estático em Java
Este artigo apresenta a palavra-chave estática em Java.
Nesta página
Na linguagem Java, static é uma palavra-chave que pode ser usada em vários lugares. A palavra-chave static é usada junto com uma variável de membro, funções de membro, blocos e classes aninhadas. A aplicação de palavras-chave estáticas é onde não queremos criar uma nova instância todas as vezes. Em vez disso, o usamos em locais onde a única cópia é compartilhada dentro da classe. Variáveis estáticas são armazenadas na memória heap, que é um tipo de memória permanente.
Uso da palavra-chave static junto com variáveis de membro em Java
O bloco de código explica como a variável estática é diferente das variáveis não estáticas.
public class StaticVariableUsage {
public static void main(String[] args) {
InnerClass in = new InnerClass();
InnerClass in1 = new InnerClass();
InnerClass2 in2 = new InnerClass2();
InnerClass2 in3 = new InnerClass2();
}
static class InnerClass {
static int var4 = 0;
InnerClass() {
var4++;
System.out.println("static variable : " + var4);
}
}
static class InnerClass2 {
int var5 = 0;
InnerClass2() {
var5++;
System.out.println("non-static variable : " + var5);
}
}
}
No bloco de código acima, há uma classe pública chamada de classe StaticVariableUsage. Possui um método estático e duas classes internas. A classe interna chamada InnerClass tem uma variável inteira estática var4 e é iniciada com zero. A classe tem um construtor que incrementa a variável inteira estática e imprime seu valor.
Outra classe interna tem o nome InnerClass2 e contém uma variável não estática var5. Esta classe também possui um construtor que incrementa a variável não estática e imprime seu valor.
Passando para o método main, aqui, InnerClass e InnerClass2 são instanciados duas vezes. A análise pode ser derivada quando a chamada do construtor acontece e um objeto é instanciado com uma nova palavra-chave.
Como diz a saída, a variável estática é iniciada e preservada. O valor é incrementado pela primeira vez e imprime o valor como 1. Da próxima vez, quando criarmos outra instância, o construtor será chamado novamente. Mas a variável estática não é reinicializada com zero novamente. Em vez disso, o valor armazenado anteriormente é incrementado, tornando o valor da variável estática dois.
Da mesma forma, quando uma instância de InnerClass2 é criada, cada vez que uma variável não estática é inicializada com o valor 0. Portanto, ele imprime o valor como 1 na saída em ambas as vezes.
static variable : 1
static variable : 2
non-static variable : 1
non-static variable : 1
Uso da palavra-chave static junto com funções de membro em Java
Temos uma classe externa chamada classe StaticFunctionUsage que contém a outra classe interna na classe abaixo. InnerClass tem uma função estática. E outra classe interna chamada InnerClass1 tem um método não estático.
Agora, passando para o método main, é visto que a função estática é diretamente acessível com o nome da classe. Não precisamos instanciar o objeto InnerClass. Da mesma forma, quando tentamos acessar a função não estática function1 com o nome da classe, um erro em tempo de compilação é populado. Se quisermos acessar a função, a instância da classe precisa ser criada, que criamos com o nome de variável in. O uso da variável é para chamar function1 e é uma instrução válida.
public class StaticFunctionUsage {
public static void main(String[] args) {
InnerClass.function();
// InnerClass1.function1();
InnerClass1 in = new InnerClass1();
in.function1();
}
static class InnerClass {
static void function() {
System.out.println("In the static function");
}
}
static class InnerClass1 {
void function1() {
System.out.println("In the non-static function");
}
}
}
A saída do bloco de código acima é a seguinte.
In the static function
In the non-static function
Uso da palavra-chave static em um bloco em Java
O uso de blocos estáticos é para inicializar variáveis estáticas. A execução do programa começa com o método main. Se um bloco estático estiver presente em uma classe, ele será executado antes da execução do método main.
Abaixo está o código explicando o bloco estático.
public class StaticBlock {
static {
System.out.println("In the static block");
}
public static void main(String[] args) {
System.out.println("In the main method");
}
}
A saída do código é a seguinte. Como podemos ver, a instrução no bloco estático é executada primeiro.
In the static block
In the main method