Imagine um código com o bloco maior e outros blocos menores dentro do bloco maior.
As variáveis globais são criadas no bloco maior (maior escopo) e podem ser usadas em todos os blocos (no maior e menor).
As variáveis locais são criadas apenas no bloco menor (menor escopo) e só podem ser usadas no bloco menor.
Se você tentar usar uma variável local fora do seu escopo (do seu bloco menor), vai dar erro de compilação.
public class variaveisLocalEGlobal {
public static void main(String[] args) {
// Variáveis no bloco maior
int idadeGlobal = 10;
String nomeGlobal = "Jorge";
{
// Criou um bloco dentro de outro bloco (bloco menor)
// O que criar dentro desse, só vale nesse bloco
int idadeLocal = 15;
String nomeLocal = "Maria";
System.out.println("Nome: " + nomeGlobal + " tem " + idadeGlobal + " anos.");
System.out.println("Nome: " + nomeLocal + " tem " + idadeLocal + " anos.");
}
System.out.println("Nome: " + nomeGlobal + " tem " + idadeGlobal + " anos.");
System.out.println("Nome: " + nomeLocal + " tem " + idadeLocal + " anos."); // erro de compilação
}
}
Imagine um código com o bloco maior e outros blocos menores dentro do bloco maior.
As variáveis globais são criadas no bloco maior (maior escopo) e podem ser usadas em todos os blocos (no maior e menor).
As variáveis locais são criadas apenas no bloco menor (menor escopo) e só podem ser usadas no bloco menor.
Se você tentar usar uma variável local fora do seu escopo (do seu bloco menor), vai dar erro de compilação.
public class variaveisLocalEGlobal {
public static void main(String[] args) {
// Variáveis no bloco maior
int idadeGlobal = 10;
String nomeGlobal = "Jorge";
{
// Criou um bloco dentro de outro bloco (bloco menor)
// O que criar dentro desse, só vale nesse bloco
int idadeLocal = 15;
String nomeLocal = "Maria";
System.out.println("Nome: " + nomeGlobal + " tem " + idadeGlobal + " anos.");
System.out.println("Nome: " + nomeLocal + " tem " + idadeLocal + " anos.");
}
System.out.println("Nome: " + nomeGlobal + " tem " + idadeGlobal + " anos.");
}
}
Nome: Jorge tem 10 anos.
Nome: Maria tem 15 anos.
Nome: Jorge tem 10 anos.
Regras de escopo:
public class EscopoVariaveis {
public static void main(String[] args) {
// Variáveis declaradas no escopo do método main
int numero = 10; // Variável global
// Este bloco cria um novo escopo
{
// Variável declarada dentro deste bloco
int numeroLocal = 20;// Variável local
// Podemos acessar variáveis do escopo exterior
System.out.println("Dentro do bloco:");
System.out.println("numero = " + numero); // Acessível
System.out.println("numeroLocal = " + numeroLocal); // Acessível
}
// Fora do bloco
System.out.println("\nFora do bloco:");
System.out.println("numero = " + numero); // Acessível
// A linha abaixo causaria erro de compilação, pois numeroLocal
// não está acessível fora do bloco onde foi declarado
// System.out.println("numeroLocal = " + numeroLocal); // ERRO!
// Outro exemplo com for
for (int i = 0; i < 3; i++) {
System.out.println("\nValor de i no loop: " + i);
// A variável i só existe dentro do escopo do for
int valorCalculado = i * 100;
System.out.println("Valor calculado: " + valorCalculado);
}
// Ambas as linhas abaixo causariam erro de compilação
// System.out.println("i fora do loop: " + i); // ERRO!
// System.out.println("valorCalculado: " + valorCalculado); // ERRO!
}
}
Dentro do bloco:
numero = 10
numeroLocal = 20
Fora do bloco:
numero = 10
Valor de i no loop: 0
Valor calculado: 0
Valor de i no loop: 1
Valor calculado: 100
Valor de i no loop: 2
Valor calculado: 200
Teste seus conhecimentos sobre variáveis locais e globais (campos) em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: