freeCodeCamp/guide/portuguese/java/static/index.md

132 lines
3.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

---
title: Static
localeTitle: Estático
---
# Estático
Quando você declara uma variável ou um método como estático, ela pertence à classe, em vez de a uma instância específica. Isso significa que apenas uma instância de um membro estático existe, mesmo se você criar vários objetos da classe ou se não criar nenhum. Ele será compartilhado por todos os objetos.
A palavra-chave static pode ser usada com variáveis, métodos, blocos de códigos e classes aninhadas.
## Variáveis Estáticas
**_Exemplo:_**
```java
public class Counter {
public static int COUNT = 0;
Counter() {
COUNT++;
}
}
```
A variável `COUNT` será compartilhada por todos os objetos dessa classe. Quando criamos objetos da nossa classe Counter no main e acessamos a variável estática.
```java
public class MyClass {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.COUNT);
}
}
// Outputs "2"
```
O outout é 2, porque a variável `COUNT` é estática e é incrementada por um a cada vez que um novo objeto da classe Counter é criado. Você também pode acessar a variável estática usando qualquer objeto dessa classe, como `c1.COUNT` .
## Métodos estáticos
Um método estático pertence à classe em vez de instâncias. Assim, pode ser chamado sem criar instância de classe. É usado para alterar os conteúdos estáticos da classe. Existem algumas restrições de métodos estáticos:
1. O método estático não pode usar membros não estáticos (variáveis ou funções) da classe.
2. Método estático não pode usar `this` ou `super` palavras `super` chave.
**_Exemplo:_**
```java
public class Counter {
public static int COUNT = 0;
Counter() {
COUNT++;
}
public static void increment(){
COUNT++;
}
}
```
Métodos estáticos também podem ser chamados da instância da classe.
```java
public class MyClass {
public static void main(String[] args) {
Counter.increment();
Counter.increment();
System.out.println(Counter.COUNT);
}
}
// Outputs "2"
```
A saída é 2 porque é incrementada pelo método estático `increament()` . Semelhante a variáveis estáticas, os métodos estáticos também podem ser acessados usando variáveis de instância.
## Blocos estáticos
Blocos de código estático são usados para inicializar variáveis estáticas. Esses blocos são executados imediatamente após a declaração de variáveis estáticas.
**_Exemplo:_**
```java
public class Saturn {
public static final int MOON_COUNT;
static {
MOON_COUNT = 62;
}
}
```
```java
public class Main {
public static void main(String[] args) {
System.out.println(Saturn.MOON_COUNT);
}
}
// Outputs "62"
```
A saída é 62, porque a variável `MOON_COUNT` é atribuída a esse valor no bloco estático.
## Classes aninhadas estáticas
Uma classe pode ter uma classe aninhada estática que pode ser acessada usando o nome da classe externa.
**_Exemplo:_**
```java
public class Outer {
public Outer() {
}
public static class Inner {
public Inner() {
}
}
}
```
No exemplo acima, a classe `Inner` pode ser acessada diretamente como um membro estático da classe `Outer` .
```java
public class Main {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner();
}
}
```
Um dos casos de uso de classes aninhadas estáticas no [Builder Pattern](https://en.wikipedia.org/wiki/Builder_pattern#Java) usado popularmente em java.