Escopo refere-se à vida e acessibilidade de uma variável. Quão grande é o alcance depende de onde uma variável é declarada. Por exemplo, se uma variável é declarada na parte superior de uma classe, ela será acessível a todos os métodos de classe. Se for declarada num método, em seguida, só pode ser utilizada em tal método.
O escopo de uma variável é a parte do programa que pode acessar uma variável. Quando você tenta acessar uma variável que não está no escopo, você normalmente tém um erro do compilador. Aqui estão algumas das regras de escopo:
- Variáveis de classe (campos estáticos) estão no escopo em todos os lugares na classe.
- Se uma variável de classe é declarada “pública”, está no escopo em todas as classes.
- As variáveis de instância (campos não-estáticos) estão no escopo em métodos não estáticos chamados em um objeto apropriado.
- As variáveis e parâmetros locais estão no escopo apenas dentro do método que os declarou.
Exemplo:
Neste exemplo veremos o alcance do escopo das variáveis estáticas, publicas e privadas em sua classe. Na classe principal vemos o resultado do escopo utilizado na classe planeta.
As variáveis privadas podem ser utilizadas somente dentro da classe planeta, a variável publica pode ser utilizada por todas as classes ou neste caso pelo objeto, a variável estática é utilizada globalmente e não precisa ser instanciada, todos os objeto que você criar, ou seja outros planetas irão compartilhar os dados desta variável, as variáveis locais criadas dentro do construtor só podem ser utilizadas dentro do método em que foi criada.
Criamos o objeto da classe planeta chamado Marte, experimente criar outros objetos com nome de planetas e imprima seus valores.
Java
Classe #1 – Principal
public class principal { public static void main(String[] args) { Planetas marte = new Planetas(3.0, 1.5, 6.419e23); marte.apelido = "Marte"; System.out.println("Quantidade de planetas: " + Planetas.numeroDePlanetas); System.out.println("Nome do Planeta: " + marte.apelido); System.out.println("As outras variaveis da classe não podem ser alcançadas devido ao escopo"); System.out.println("mas podem ser utlizadas dentro da classe"); } }
Classe #2 – Planetas
public class Planetas { // Variavel da classe é compartilhada por todos public static long numeroDePlanetas; // Variavel de intancias private double x, y; private double massa; public String apelido; // Construtor // x e y são variaveis instanciadas, // mas newX and newY são variaveis locais // O construtor incrementa o valor public Planetas(double novoX, double novoY, double novaMassa) { x = novoX; y = novoY; massa = novaMassa; numeroDePlanetas++; } }
C#
Classe #1 – Principal
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication53 { class Program { static void Main(string[] args) { Planetas marte = new Planetas(3.0, 1.5, 6.419e23); marte.apelido = "Marte"; Console.WriteLine("Quantidade de planetas: " + Planetas.numeroDePlanetas); Console.WriteLine("Nome do Planeta: " + marte.apelido); Console.WriteLine("As outras variaveis da classe não podem ser alcançadas devido ao escopo"); Console.WriteLine("mas podem ser utlizadas dentro da classe"); Console.ReadKey(); } } }
Classe #2 – Planetas
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication53 { public class Planetas { // Variavel da classe é compartilhada por todos public static long numeroDePlanetas; // Variavel de intancias private double x, y; private double massa; public String apelido; // Construtor // x e y são variaveis instanciadas, // mas newX and newY são variaveis locais // O construtor incrementa o valor public Planetas(double novoX, double novoY, double novaMassa) { x = novoX; y = novoY; massa = novaMassa; numeroDePlanetas++; } } }
C++
Classe #1 – Principal
#include "stdafx.h" #include <iostream> #include <string> #include "planetas.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { Planetas marte(3.0, 1.5, 6.419e23); marte.apelido = "Marte"; cout << "Quantidade de planetas: " << marte.numeroDePlanetas << endl; cout << "Nome do Planeta: " << marte.apelido << endl; cout << "As outras variaveis da classe não podem ser alcançadas devido ao escopo" << endl; cout << "mas podem ser utlizadas dentro da classe" << endl; system("pause"); return 0; }
Classe #2 – Planetas
#include "stdafx.h" #include <iostream> #include <string> using namespace std; class Planetas { private: // Variavel de intancias double x, y; double massa; public: // Variavel de intancias string apelido; // Variavel da classe é compartilhada por todos static int numeroDePlanetas; // Construtor // x e y são variaveis instanciadas, // mas newX and newY são variaveis locais // O construtor incrementa o valor Planetas(double novoX, double novoY, double novaMassa) { x = novoX; y = novoY; massa = novaMassa; numeroDePlanetas++; } }; int Planetas::numeroDePlanetas;