Compreensão de palavras-chave comumente usadas em Java

Compreensão de palavras-chave comumente usadas em Java

Existem muitas palavras-chave em Java, cerca de 50+. Não podemos entrar em conflito com essas palavras-chave em termos de nomenclatura. A compilação relatará erros. Cada palavra-chave representa um significado diferente em cenários diferentes. A seguir, escolhemos alguns mais importantes Sobre palavras-chave, saiba mais.

Um: estático

Estático significa estático e global. Uma vez modificado, significa que a coisa modificada é compartilhada dentro de um determinado escopo e qualquer pessoa pode acessá-la. Neste momento, você precisa prestar atenção ao problema de leitura e escrita simultâneas.

1.1, objetos modificados

static só pode modificar variáveis ​​de classe, métodos e blocos de método.

1), variáveis ​​de classe modificadas

Quando static modifica uma variável de classe, se a variável é pública, significa que a variável pode ser acessada diretamente por qualquer classe, e não há necessidade de inicializar a classe, basta usar a variável nome da classe.static para acessá-la diretamente.

Neste momento, precisamos prestar atenção à questão da segurança do thread, porque quando vários threads leem e gravam variáveis ​​compartilhadas ao mesmo tempo, é provável que ocorram problemas de simultaneidade, portanto, se você quiser evitar esse problema, é melhor visitar cada vez Bloquear manualmente

2), método de modificação

Quando estático modifica um método, significa que o método não tem nada a ver com a classe atual e qualquer classe pode ser acessada diretamente (se a permissão for pública).

Uma coisa a notar é que este método só pode chamar métodos que também são modificados por estático, e não pode chamar métodos comuns.Vários métodos em nossas classes util comumente usadas são todos decorados com estático.

As variáveis ​​dentro do método estático não são thread-safe durante a execução. Quando o método é executado, os dados são executados na pilha e cada thread dos dados da pilha é isolado, portanto, não haverá problemas de segurança de thread, portanto, podemos usar os métodos estáticos da classe util com confiança.

3) Bloco do método de modificação

Quando estático modifica um bloco de método, nós o chamamos de bloco estático. O bloco estático costuma ser usado para inicializar alguns valores antes do início da classe, como:

private static String ROOT_URL;

static {
    
    
    if (Constants.debug) {
    
    
        ROOT_URL = "调试环境下的URL";
    } else {
    
    
        ROOT_URL = "正式环境下的URL";
    }
}

Este código demonstra que o bloco estático faz algum trabalho de inicialização, mas deve-se notar que o bloco estático só pode chamar variáveis ​​que também são modificadas por estático, e as variáveis ​​estáticas precisam ser escritas na frente do bloco estático, caso contrário, a compilação relatará um erro.

1.2 Tempo de inicialização

O método modificado por static não será inicializado quando a classe for inicializada, mas somente quando for chamado, e as variáveis ​​e blocos estáticos serão inicializados antes do construtor da classe.

Dois: final

Final significa inalterado e geralmente é usado nos três cenários a seguir:

  1. Uma classe modificada por final indica que a classe não pode ser herdada;
  2. O método modificado final indica que o método não pode ser substituído;
  3. Uma variável modificada por final significa que a variável deve ser inicializada ao ser declarada, e seu endereço de memória não pode ser modificado posteriormente;

Nota : O terceiro ponto, dissemos que o endereço de memória não pode ser modificado, e não dissemos que o valor não pode ser modificado.Para detalhes, veja a imutabilidade de String .

Três: volátil

Volátil significa visível. É freqüentemente usado para modificar uma variável compartilhada. Isso significa que quando o valor de uma variável compartilhada é modificado, ela será notificada para outros threads a tempo, e outros threads podem saber que o valor da variável compartilhada atual foi modificado.

Em uma CPU multi-core, para melhorar a eficiência, o thread lida diretamente com o cache da CPU em vez da memória ao obter o valor. O principal motivo é que a velocidade de execução do cache da CPU é mais rápida. Por exemplo, se o thread quiser obter o valor C, ele o obterá diretamente do cache da CPU. Se não houver cache da CPU, ele o obterá da memória, então a operação de leitura do thread sempre obtém o valor do cache da CPU. .

Neste momento, haverá um problema. O valor no cache da CPU e o valor na memória podem não estar sincronizados o tempo todo. Como resultado, o valor calculado pelo thread pode não ser o mais recente. O valor da variável compartilhada pode ter sido modificado por outros threads. A modificação do tempo é o valor da memória da máquina, e o valor do cache da CPU ainda é antigo, causando problemas de cálculo.

Neste momento, existe um mecanismo, ou seja, a memória irá notificar ativamente o cache da CPU. O valor da variável compartilhada atual expirou, você precisa obter uma cópia novamente e o cache da CPU buscará o valor mais recente da memória novamente.

A palavra-chave volatile irá acionar este mecanismo, e a variável com a palavra-chave volatile será reconhecida como uma variável compartilhada. Após a modificação do valor na memória, cada cache da CPU será notificado, de modo que o valor no cache da CPU seja modificado de acordo , Para garantir que o valor que o thread buscou do cache da CPU seja o mais recente.

Quatro: padrão

A palavra-chave default é geralmente usada em métodos de interface, o que significa que para esta interface, as subclasses não precisam implementar obrigatório, mas devem ter uma implementação padrão.

Cinco: perguntas da entrevista

5.1 Como provar que variáveis ​​estáticas estáticas não têm nada a ver com classes?

  1. Podemos usar variáveis ​​estáticas diretamente sem inicializar a classe;
  2. Escrevemos um método principal na classe a ser executado, mesmo se não escrevermos o código para inicializar a classe, as variáveis ​​estáticas serão inicializadas automaticamente;
  3. Variáveis ​​estáticas só serão inicializadas uma vez. Após a inicialização ser completada, não importa quantas novas classes eu saia, variáveis ​​estáticas não serão inicializadas novamente;

Não apenas variáveis ​​estáticas, os blocos de métodos estáticos também são irrelevantes para as classes.

Seis: Resumo

Palavras-chave Java são um conteúdo relativamente básico e precisamos ser claros sobre seus significados para entender por que tais palavras-chave são usadas aqui. Por exemplo, como o código-fonte da String usa a palavra-chave final para alcançar a imutabilidade, por exemplo, como o Mapa na coleção Java 8 usa a palavra-chave padrão para adicionar vários métodos.

Acho que você gosta

Origin blog.csdn.net/weixin_38478780/article/details/107779887
Recomendado
Clasificación