JavaRush /Blogue Java /Random-PT /Modificadores ou como lançar encantamentos no mundo Java
Petr Gorskin
Nível 22
Москва

Modificadores ou como lançar encantamentos no mundo Java

Publicado no grupo Random-PT
Bom dia galáctico, camaradas! Este é meu primeiro manuscrito interplanetário e, como sou engenheiro, a interpretação de alguns conceitos pode ser feita em linguagem extraterrestre.
Modificadores ou como lançar encantamentos no mundo Java - 1
Introdução Na minha opinião, Java é como um corredor sem fim com portas (pacote). Atrás de cada uma dessas portas há espaço livre e um arquivo no qual está armazenada uma montanha de pergaminhos mágicos com instruções (aulas) para a criação de objetos. Cada pergaminho descreve um conjunto de características (variáveis) e habilidades (métodos) - ações (campos) realizadas na própria classe ou em um objeto montado com base nela. Nesta fase, vamos nos imaginar como magos e tentar criar uma instrução (classe) completamente nova. Então: Modificadores ou como lançar encantamentos no mundo Java - 2vamos beber o elixir da sabedoria (aprender o básico) e começar a escrever as instruções. Modificadores de acesso e não acesso Imaginemos que qualquer instrução e objeto criado a partir dela, bem como suas características e habilidades, serão inicialmente encantados magicamente, ou seja, eles receberão conjuntos específicos de modificadores. Vamos tentar criar um guia sobre possíveis encantamentos.
  1. O modificador de acesso , que descreve a acessibilidade de uma classe, objeto ou campo, é obrigatório: na sua ausência, a JVM (esta é uma fonte de magia universal) atribui automaticamente um identificador padrão ao pacote.

    A partir do segundo modificador, existem modificadores de não acesso, que não são obrigatórios e também podem entrar em conflito entre si (mas primeiro o mais importante).

  2. O modificador Static indica que a classe, objeto ou campo é estático. Mas o que isso significa? Basicamente vamos tentar isso nos campos.

    Variáveis ​​estáticas são chamadas de variáveis ​​de classe e são exclusivas para todas as instâncias dessa classe. Métodos estáticos podem ser chamados sem criar o objeto no qual são declarados. Classes estáticas são usadas ao aninhar uma classe em outra e o princípio de interação entre a classe interna e a externa é semelhante aos métodos (este é um tópico para uma discussão separada). Também pode ser usado como um bloco separado dentro de um objeto.

  3. O modificador Final indica efetivamente a uma variável que ela é uma constante. Para métodos - que eles não podem ser substituídos durante a herança, mas para classes isso é uma indicação de que não pode ser herdado (imutável).

    Os modificadores estáticos e finais se aplicam a classes, objetos e campos. Porém, existem modificadores que se aplicam apenas a alguns deles (ou mesmo a parte deles, já que tanto uma variável quanto um método são um campo, mas nem todos os modificadores se aplicam a ambos). Se fizermos uma analogia, apenas botas e luvas podem ser encantadas para velocidade (para fazê-las se moverem mais rápido), mas encantar um chapéu para velocidade é inútil (e o Conselho Supervisor Universal (compilador) não permitirá isso).

  4. O modificador Abstract se aplica apenas a métodos e classes . Um método abstrato é um método sem implementação (corpo).

    Se uma classe for marcada como abstrata, ela contém métodos abstratos ou é feita para impedir a criação de instâncias dessa classe. Se fizermos uma analogia, no meio das instruções você verá o título “Colorir um objeto”, após o qual não há descrição. Aqueles. usando esta instrução você pode criar um objeto e também colori-lo, mas esta instrução específica não diz como (escreva suas próprias instruções para criar um objeto vermelho baseado neste objeto e descreva como colori-lo).

Ao trabalhar em um ambiente multithread, modificadores especiais podem ser usados:
  1. O modificador Syncronized é usado apenas para métodos. Sua presença indica que apenas um thread pode executá-lo por vez. Também pode ser usado como um bloco de código separado dentro de um objeto (especificando o objeto de sincronização).

  2. Modificador volátil - apenas para variáveis . É recomendado ser usado para variáveis ​​que podem ser usadas simultaneamente por vários threads. Uma variável com esse modificador é instantaneamente copiada do cache do processador para a memória principal sempre que é alterada, permitindo que threads paralelos recebam o valor mais recente.

    É importante notar que volátil é aplicável nos casos em que apenas um thread pode gravar em uma variável e o restante só pode ler a partir dela. Para outros casos, é melhor adicionar o modificador sincronizado aos métodos que escrevem em uma variável volátil.

  3. Modificador transitórioapenas para variáveis . Este modificador marca variáveis ​​que precisam ser ignoradas ao serializar um objeto (este é um processo tão inteligente que, em princípio, você mesmo pode ler sobre ele...)*

    * - Escrevi este artigo no nível 17 e até então a serialização como processo não havia sido descrita, então ao invés de copiar e colar, aconselho você mesmo a estudá-lo se necessário.

Pares de modificadores conflitantes Além da aplicabilidade dos modificadores a diversas classes, objetos e campos, existe também o conceito de pares conflitantes. Digamos que encantar um capacete com força o torne pesado, e ao mesmo tempo você queira encantá-lo para que fique leve. Um não combina com o outro.
  1. Final e Volátil - quando se trata de variáveis, não podemos dizer simultaneamente que ela é final (constante) e que várias threads têm a capacidade de alterá-la... Afinal, ela é constante, e a qualquer momento uma thread pode lê-la , mas nem um único thread pode alterar a constante (o Conselho Supervisor Universal não permitirá isso).
  2. Final e Abstrato - classes e métodos não podem ser ao mesmo tempo abstratos (o que na maioria dos casos implica a necessidade de esclarecê-los para implementação) e finais, ou seja, imutável. Acontece que as instruções dizem como criar um capacete bom e durável a partir de qualquer material (parte abstrata), mas para isso não deve haver furos nele (a parte final obrigatória, não pode ser alterada).
  3. Abstrato e Estático – Um método abstrato não pode ser estático ou sincronizado ao mesmo tempo. Um método abstrato estático não faz sentido, porque não apenas não faz nada, mas também pertence a uma classe inteira - o resultado é inútil.
  4. Abstrato e sincronizado - qual o sentido de sincronizar o trabalho com um método que não faz nada?
Resumindo Então, a descrição dos modificadores acabou, todos os conflitos foram resolvidos e agora você pode consolidar o resultado obtido com uma folha de dicas - um diagrama de encantamento: Modificadores ou como lançar encantamentos no mundo Java - 3Concluindo, quero dizer que escrever este artigo foi a realização do meu desejo de estudar modificadores. Se a experiência foi bem-sucedida ou não, cabe a você julgar. Estou aguardando suas sugestões para melhorá-lo/corrigir, e talvez juntos possamos transformá-lo em um manual muito útil para jogadores iniciantes de java.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION