Estático significa "global" ou "estático" e é usado para modificar variáveis e métodos de membros. Também pode formar um bloco de código estático, mas não há conceito de variáveis globais na linguagem Java.
Variáveis de membro e métodos de membro modificados por estáticos são independentes de quaisquer objetos da classe. Ou seja, não depende de uma instância específica da classe e é compartilhado por todas as instâncias da classe.
Enquanto esta classe estiver carregada, a máquina virtual Java poderá encontrá-la por padrão na área de método da área de dados de tempo de execução com base no nome da classe. Portanto, um objeto estático pode ser acessado antes de qualquer um de seus objetos ser criado, sem fazer referência a nenhum objeto.
Variáveis de membros estáticos e métodos de membros modificados com public são essencialmente variáveis globais e métodos globais. Quando um objeto de sua classe é declarado, uma cópia da variável estática não é gerada, mas todas as instâncias da classe compartilham a mesma variável estática.
Uma variável estática pode ser precedida por uma modificação privada, o que significa que esta variável pode ser usada no bloco de código estático da classe ou em outros métodos membros estáticos da classe (é claro, também pode ser usada em métodos não estáticos métodos de membro), mas não pode ser usado em outras classes. É importante referir-se diretamente ao nome da classe. Na verdade, você precisa entender que privado significa restrição de permissão de acesso, e estático significa que pode ser usado sem instanciação, o que é muito mais fácil de entender. O efeito de adicionar outras palavras-chave de permissão de acesso antes da estática também é o mesmo.
Variáveis de membro e métodos de membro modificados por estáticos são normalmente chamados de variáveis estáticas e métodos estáticos. Eles podem ser acessados diretamente através do nome da classe.
Nome da classe. Nome do método estático (lista de parâmetros...)
Nome da classe. Nome da variável estática
Um bloco de código modificado com estático representa um bloco de código estático. Quando a Java Virtual Machine (JVM) carrega uma classe, o bloco de código será executado (muito útil, haha).
1. variável estática
As variáveis de membro de classe podem ser classificadas em dois tipos, dependendo de serem estáticas: uma é uma variável modificada por estática, chamada de variável estática ou variável de classe, a outra é uma variável não modificada por estática, chamada de variável de instância;
A diferença entre os dois é:
Para variáveis estáticas, há apenas uma cópia na memória (para economizar memória, a JVM aloca memória apenas uma vez para variáveis estáticas. A alocação de memória das variáveis estáticas é concluída durante o processo de carregamento da classe). o nome da classe (conveniente, claro, também pode ser acessado através de objetos Visit (mas isso não é recomendado).
Para variáveis de instância, antes de uma instância ser criada, a memória será alocada uma vez para a variável de instância. As variáveis de instância podem ter múltiplas cópias na memória sem afetar umas às outras (flexível).
Portanto, variáveis estáticas são geralmente usadas quando as duas funções a seguir precisam ser implementadas:
1).Ao compartilhar valores entre objetos
2).Quando acessar variáveis é conveniente
2. Método estático
Métodos estáticos podem ser chamados diretamente pelo nome da classe e qualquer instância também pode ser chamada.
Portanto, as palavras-chave this e super não podem ser usadas em métodos estáticos, e as variáveis de instância e métodos de instância da classe à qual pertencem não podem ser acessados diretamente (ou seja, variáveis de membro e métodos de membro sem estática). métodos membros da classe à qual pertencem podem ser acessados.
Porque os membros da instância estão associados a objetos específicos! Isso precisa ser entendido e descoberto, não memorizado! ! !
Como os métodos estáticos são independentes de qualquer instância, os métodos estáticos devem ser implementados e não podem ser abstratos.
Por exemplo, para facilitar a chamada de métodos, todos os métodos da classe Math na API Java são estáticos, e os métodos estáticos nas classes gerais também facilitam que outras classes chamem o método.
Um método estático é um tipo especial de método dentro de uma classe. O método correspondente é declarado estático apenas quando necessário.
3. bloco de código estático
Um bloco de código estático também é chamado de bloco de código estático. É um bloco de instrução estático em uma classe que é independente dos membros da classe. será executado quando a JVM carregar a classe, se houver vários blocos de código estático, a JVM os executará na ordem em que aparecem na classe e cada bloco de código será executado apenas uma vez. Por exemplo:
classe pública Teste5 { privado estático int a; privado int b; Test5.a=3; println(tb); } static{ Test5.a=4; System.out.println(a } public static void main(String[] args) { // TODO Gerar stubs de método automaticamente} static{ Test5.a=5; System.out.println(a);
Resultados em execução:
3
hahahaha
1000
4
5
Você pode usar blocos de código estático para atribuir valores a algumas variáveis estáticas. Finalmente, dê uma olhada nestes exemplos. Todos eles têm um método principal estático, para que a JVM possa chamá-lo diretamente sem criar uma instância ao executar o método principal. .
4. O que significam estático e final quando usados juntos?
Final estático é usado para modificar variáveis e métodos de membros, que podem ser simplesmente entendidos como "constantes globais"!
Para variáveis, significa que uma vez fornecido um valor, ele não pode ser modificado e pode ser acessado através do nome da classe.
Para métodos, significa que eles não são substituíveis e podem ser acessados diretamente através do nome da classe.
Às vezes você deseja definir um membro de classe para que seu uso seja completamente independente de quaisquer objetos dessa classe. Normalmente, um membro de classe deve ser acessado através de um objeto de sua classe, mas é possível criar um membro que possa ser usado sozinho sem fazer referência a uma instância específica. Tal membro pode ser criado adicionando a palavra-chave static (static) antes da declaração do membro. Se um membro for declarado estático, ele poderá ser acessado antes de qualquer objeto de sua classe ser criado, sem a necessidade de fazer referência a nenhum objeto. Você pode declarar métodos e variáveis como estáticos. O exemplo mais comum de membro estático é main(). Como main() deve ser chamado quando o programa inicia a execução, ele é declarado estático.
Variáveis declaradas estáticas são essencialmente variáveis globais. Quando um objeto é declarado, uma cópia da variável estática não é produzida, mas todas as variáveis de instância da classe compartilham a mesma variável estática. Os métodos declarados estáticos têm as seguintes restrições:
1).Eles só podem chamar outros métodos estáticos.
2).Eles só podem acessar dados estáticos.
3).Eles não podem se referir a this ou super de forma alguma (a palavra-chave super está relacionada à herança e é descrita no próximo capítulo).
Se precisar inicializar suas variáveis estáticas por meio de cálculo, você pode declarar um bloco estático. O bloco estático é executado apenas uma vez quando a classe é carregada. O exemplo a seguir mostra uma classe com um método estático, algumas variáveis estáticas e um bloco inicializador estático:
// Demonstra variáveis, métodos e blocos estáticos class UseStatic { static int a = 3; static int b; println("a = " + a); System.out.println("b = " + b); static { System.out.println("Bloco estático inicializado."); } public static void main(String args[]) { meth(42);
Depois que a classe UseStatic é carregada, todas as instruções estáticas são executadas. Primeiro, a é definido como 3, depois o bloco estático é executado (imprimindo uma mensagem) e, finalmente, b é inicializado como a*4 ou 12. Então main() é chamado, main() chama meth(), passando o valor 42 para x. As três instruções println() referem-se a duas variáveis estáticas aeb e à variável local x.
Nota: É ilegal fazer referência a quaisquer variáveis de instância em um método estático.
Aqui está o resultado deste programa:
Copie o código do código da seguinte forma:
Bloco estático inicializado.
x = 42
uma=3
b = 12
Métodos e variáveis estáticos podem ser usados independentemente de qualquer objeto fora da classe na qual estão definidos. Dessa forma, basta adicionar o operador ponto após o nome da classe. Por exemplo, se você deseja chamar um método estático de fora da classe, você pode usar o seguinte formato geral:
Copie o código do código da seguinte forma:
nome da classe.método()
Aqui, classname é o nome da classe na qual o método estático é definido. Como você pode ver, esse formato é semelhante ao formato de chamada de métodos não estáticos por meio de variáveis de referência de objeto. Uma variável estática pode ser acessada no mesmo formato – o nome da classe seguido pelo operador ponto. É assim que Java implementa uma versão controlada de funções e variáveis globais.
Abaixo está um exemplo. Em main(), o método estático callme() e a variável estática b são acessados fora de suas classes.
class StaticDemo { static int a = 42; { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b);
Aqui está o resultado deste programa:
Copie o código do código da seguinte forma:
uma = 42
b = 99
Membros estáticos não podem ser acessados por instâncias criadas por sua classe.
Se os membros sem modificação estática forem membros do objeto, eles pertencerão a cada objeto.
Membros modificados com static são membros de classe, o que significa que podem ser chamados diretamente por uma classe e são comuns a todos os objetos.