aprender programação com Java

escopo variável

cada variável só está disponível (e acessível) no contexto em que foi declarada. Para determinar o contexto, consulte as marcas de abertura e fechamento mais próximas que rodeiam a declaração. A maioria das linguagens de programação usa Chavetas ({}) para marcar o início e o fim de um bloco de código. Veja este exemplo:

Escopo de uma variável

não é necessário entender todos os bits de código aqui; concentre-se apenas no chavetas. 🙂 Quando falamos sobre a disponibilidade de uma variável dentro de um contexto, estamos nos referindo ao escopo. Aqui, você pode ver que a variável root foi declarada entre os dois suspensórios encaracolados em roxo. O alcance dessa variável é tudo entre esses dois aparelhos.

O escopo de uma variável pode ser local, bem como global, Dependendo de onde uma variável é declarada. Uma variável global pode estar disponível para todas as classes e métodos dentro de um programa enquanto uma variável local podem estar disponíveis apenas dentro do método que ela é declarada em:

Local vs global escopo

Aqui, expandimos o código um pouco e estendeu o nosso primeiro bloco de código para incluir um outro! Se você rastrear as linhas roxas, você pode ver que os suportes do primeiro bloco englobam todo o código a partir do segundo. Em seguida, você pode ver que uma nova variável, spy, foi declarada dentro do escopo local verde.

Uma vez que a variávelroot foi declarada no âmbito global, isso significa que é acessível a tudo dentro dos parênteses roxos, incluindo tudo o que é declarado no âmbito local. No segundo bloco de código, você pode ver uma linha logo abaixo da declaração da variável spy que usa root. Isso é permitido!

no entanto, o que quer que esteja no âmbito local não está disponível para o âmbito global, ou quaisquer outros blocos locais de código. Vamos dar uma olhada em outro exemplo:

Vários âmbitos

Aqui nós adicionamos mais um bloco de código, que tem seu próprio escopo local e sua própria variável, anotherSpy. Agora, confira a última linha em nosso bloco de variáveis espião:

System.out.println(anotherSpy); // Error

parece que há um erro! Isso porque está tentando usar a variávelanotherSpy. Mas não pode porque anotherSpy não está nem dentro do escopo global nem no mesmo escopo local. Isso significa que este bloco de código não pode aceder-lhe. anotherSpy está disponível apenas no bloco de código em que foi declarado.

o mesmo é verdadeiro na outra direção. Você pode ver que a última linha do nosso último bloco de código também tem um erro:

System.out.println(spy); // Error

Aqui, ele está tentando usar a variável spy de outro bloco de código. Mas não pode, uma vez que spy não está no mesmo escopo do bloco de código que está tentando usá-lo.

âmbito variável nas classes

quando se declara uma classe, aplicam-se as mesmas regras gerais de escopo: cada variável só é acessível dentro do seu bloco de declaração. Vamos experimentar com um unicórnio classe:

Unicórnio classe

assim como em nosso primeiro exemplo, há global de variáveis de classe, bem como os locais. Vamos rever em detalhe:

  • As variáveis height e power são campos de classe e estão acessíveis em qualquer lugar dentro da classe.

  • a variável minutesToSleep só é acessível no âmbito local do bloco de código em que é declarada.

  • a variável só é acessível no âmbito local do bloco de código em que é declarada.

o âmbito de uma variável limita a sua acessibilidade por definição. No entanto, campos de classe são acessíveis fora da classe e podem ser usados por qualquer outro bloco de código.

no nosso exemplo, estes são heightepower. Se declararmos uma variável Unicórnio, podemos ler ou alterar esses valores:

ser capaz de mexer com variáveis de classe pode ter consequências graves. A boa notícia é que podes controlar isso! Antes de verificar como, certifique-se de praticar com escopo variável.

experimente você mesmo!

controlo de acesso

vamos usar a ideia de controlo de acesso implementando acesso restrito a uma classe, módulo ou ficheiro. Você já sabe o que são uma classe e um arquivo desde que trabalhamos com eles!

um módulo é um pacote de arquivos fonte relacionados associados com um nome, como um framework. Um framework é um conjunto de funcionalidades agrupadas por um contexto particular. Acelera o processo de desenvolvimento e fornece orientações sobre como escrever o código.

Há uma série de frameworks fornecidos por cada ambiente de desenvolvimento. O fato é que a implementação desses frameworks está muito além do que os desenvolvedores que os usam podem ver e utilizar. Isso é feito restringindo o acesso aos detalhes da implementação, também conhecido como implementar o controle de acesso.

Controle de níveis

Em Java, você precisa usar uma das palavras-chave para designar um nível de controle:

  • Público: visível para o mundo e, portanto, menos restritivas

  • Protegido: visível para o pacote e todas as suas subclasses

  • Pacote protegida: normalmente visível apenas para o pacote de que eles estão em (configurações padrão)

  • Privada: só acessível no contexto em que eles são definidos dentro da classe em que está localizado)

Colocar essas distintas restrições torna o desenvolvimento mais fácil. Você não tem que se preocupar com qualquer visibilidade indesejada de sua implementação e, mais ainda, modificações indesejadas.

coloque uma palavra-chave adequada na frente da declaração relacionada:

então, se você tentar acessar membros privados de fora da classe, você recebe erros:

os níveis de controlo podem ser atribuídos a elementos de classe e classes:

public class PublicClass {}private class PrivateClass {}

além da segurança, a especificação dos níveis de controlo para os membros da classe proporciona uma melhor legibilidade. Quando um desenvolvedor está preparando um arquivo de código, é sempre claro quais elementos podem ser usados externamente.

hierarquia de controlo

um elemento pode ter o mesmo ou mais restritivo nível de controlo do que o elemento que o contém:

no exemplo acima, a classe é declarada como public . Uma vez que a classe é o elemento que contém, isto significa que todos os elementos dessa classe podem ter o mesmo ou menor nível de exposição. Neste caso, inclui todos os níveis.

Se você declarar uma classe como o private, seus elementos só pode ser package-private ou private:

 class PrivateClass { int internalProperty = 0; // automatically assigned package-private by default protected defaultProperty = true; // automatically assigned package-private public boolean publicProperty = true; // automatically converted to package-private private String fileprivateProperty = "Hello!"; //only available to the class private static void privateMethod() { }}

No exemplo acima, adicionamos um atributo sem uma explícita de controle de acesso de palavras-chave. Neste cenário, por padrão, assume o nível do elemento contendo. Neste caso, é a nossa classe, por isso assume o nível de PrivateClass.

uma classe de Topo não pode ser marcada privativa, mas se a definir como padrão irá colocá-la no nível protegido por pacotes. Ao declarar uma variável de uma classe, se o nível de controle do contexto da declaração for superior ao da classe, a variável também deve ter um nível de controle explícito. Vamos declarar uma variável FileprivateClass:

String a = PrivateClass(); // Errorprivate String b = PrivateClass(); // Okprivate String c = PrivateClass(); // Ok

como você pode ver, se o nível de acesso padrão do contexto da variável é maior do que uma classe que você está atribuindo a ela, você deve especificar explicitamente o nível da variável como o mesmo ou menor do que o da classe.

resumo

neste capítulo, você aprendeu sobre acessibilidade variável:

  • um âmbito de uma variável é a área de código onde foi declarada.

  • âmbito geral da variável aplica-se a todos os blocos de código, incluindo as classes.

  • outra forma necessária para controlar o acesso a variáveis e funções é usando níveis de controle: público, Protegido, protegido por pacotes, e privado.

Deixe uma resposta

O seu endereço de email não será publicado.