O que significa estático em Java
-
Uso da palavra-chave
static
junto com variáveis de membro em Java -
Uso da palavra-chave
static
junto com funções de membro em Java -
Uso da palavra-chave
static
em um bloco em Java
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
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