Fonte: FreeCodeCamp A palavra-chave estática pode ser usada em diferentes partes do código Java, como variáveis, métodos e blocos estáticos. Hoje vamos descobrir exatamente como isso pode ser aplicado na prática. O principal objetivo de usar a palavra-chave estática em Java é economizar memória. Quando criamos uma variável em uma classe que será acessada por outras classes, devemos primeiro criar uma instância da classe e depois atribuir um novo valor a cada instância da variável. Isso é necessário para que os valores das novas variáveis sejam iguais para todas as novas classes/objetos. Mas quando criamos variáveis estáticas, seu valor permanece constante em todas as outras classes e não precisamos criar uma instância para usar a variável. Desta forma criamos a variável uma vez, para que a memória seja alocada apenas uma vez. Você entenderá isso melhor com alguns exemplos neste artigo.
Como criar uma variável estática em Java
Para entender como usar a palavra-chave static ao criar variáveis, vejamos a maneira usual de criar variáveis que são compartilhadas por cada instância de uma classe.class Student {
String studentName;
String course;
String school;
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
Student2.school = "freeCodeCamp";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
Explicarei o que aconteceu no código acima passo a passo. Criamos uma classe Student com três variáveis - studentName , course e school . Em seguida, criamos duas instâncias da classe Student :
Student Student1 = new Student();
Student Student2 = new Student();
A primeira instância é Student1 , que tem acesso às variáveis criadas em sua classe, possui os seguintes valores:
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
A segunda instância teve os seguintes significados:
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
Student2.school = "freeCodeCamp";
Se você olhar com atenção, descobrirá que os dois alunos têm o mesmo nome de escola - “freeCodeCamp”. Mas e se tivéssemos que criar 100 alunos para a mesma escola? Isso significa que inicializaremos a variável com o mesmo valor 100 vezes, alocando nova memória a cada vez. Isso pode não ser um problema para alguns, mas em uma base de código grande pode tornar o programa significativamente mais lento. Para resolver esse problema, usaremos a palavra-chave static para criar a variável school . Depois disso, todas as instâncias da classe poderão usar esta variável. Algo assim:
class Student {
String studentName;
String course;
static String school;
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
Neste código, criamos uma variável estática chamada school . Observe que a palavra-chave static precede o tipo de dados e o nome da variável: static String school = "freeCodeCamp"; . Agora, quando criamos uma nova instância da nossa classe, não precisamos inicializar a variável school para cada instância. Em nosso código, atribuímos um valor a uma variável apenas na primeira instância, e então ele foi herdado pela próxima instância. Observe que alterar o valor de uma variável estática em qualquer lugar do código substitui o valor em outras partes do código onde ela foi declarada anteriormente. Portanto, você só deve usar a palavra-chave static para variáveis que pretendem permanecer constantes no programa. Você também pode atribuir um valor a uma variável ao criá-la, para não precisar declará-la novamente ao instanciar a classe: static String school = "freeCodeCamp"; . Isto é o que você obterá se usar este método:
class Student {
String studentName;
String course;
static String school = "freeCodeCamp";
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
Agora você verá como inicializar variáveis estáticas usando blocos estáticos.
Como criar um método estático em Java
Antes de vermos o exemplo, aqui estão algumas coisas que você precisa saber sobre métodos estáticos em Java:- Os métodos estáticos só podem acessar e modificar variáveis estáticas.
- Métodos estáticos podem ser chamados/usados sem criar uma instância da classe.
class EvenNumber {
static int evenNumber;
static void incrementBy2(){
evenNumber = evenNumber + 2;
System.out.println(evenNumber);
}
public static void main(String[] args) {
incrementBy2(); // 2
incrementBy2(); // 4
incrementBy2(); // 6
incrementBy2(); // 8
}
}
No código acima, criamos um número inteiro ( evenNumber ) em uma classe chamada EvenNumber . Nosso método estático é chamado incrementBy2() . Este método incrementa o valor do inteiro EvenNumber e imprime seu valor. Sem criar uma instância da classe, conseguimos chamar o método incrementBy2() no método principal do programa . Cada vez que chamamos o método, EvenNumber foi incrementado em 2 e impresso. Você também pode anexar o nome da classe a um método usando a notação de ponto ao chamar o método: EvenNumber.incrementBy2(); . Cada método estático pertence à classe, não às instâncias da classe.
Como criar um bloco estático em Java
Os blocos estáticos em Java são semelhantes aos construtores. Podemos usá-los para inicializar variáveis estáticas, elas são executadas pelo compilador antes do método principal .class Block {
static int year;
static {
year = 2022;
System.out.println("This code block got executed first");
}
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println(year);
}
}
No código acima, criamos uma variável inteira estática year . Em seguida, inicializamos em um bloco estático:
static {
year = 2022;
System.out.println("This code block got executed first");
}
Como você pode ver, um bloco estático pode ser criado usando a palavra-chave static seguida por chaves. No bloco estático do nosso código, inicializamos a variável ano com o valor 2022. Também imprimimos algum texto - “Este bloco de código foi executado primeiro”. No método principal imprimimos “Hello World” e uma variável estática year . No console, o código será executado nesta ordem:
Este bloco de código foi executado primeiro Hello World 2022
Isso demonstra claramente como o código no bloco estático é executado primeiro, antes do método principal .
GO TO FULL VERSION