Java Palavras -chave estáticas e variáveis estáticas Java e métodos estáticos
O modificador estático pode ser usado com variáveis e métodos para indicar que é "estático".
Variáveis estáticas e métodos estáticos podem ser acessados por meio de nomes de classe, e não há necessidade de criar um objeto de uma classe para acessar os membros estáticos da classe; portanto, os membros modificados pela estática também são chamados de variáveis de classe e métodos de classe. As variáveis estáticas são diferentes das variáveis de instância, e as variáveis de instância são sempre acessadas através de objetos porque seus valores variam entre os objetos.
Por favor, veja o seguinte exemplo:
classe pública demonstração {static int i = 10; i);
Resultados em execução:
Classe variável i = 10 variável de instância j = 20
Alocação de memória estática
As variáveis estáticas pertencem a classes e não pertencem a objetos independentes, para que você possa acessar variáveis estáticas sem criar instâncias da classe. Esse resultado é porque o compilador cria apenas uma cópia das variáveis estáticas para toda a classe, ou seja, aloca apenas um espaço de memória. As variáveis de instância são diferentes.
Por favor, veja o seguinte código:
classe pública de demonstração {static int i; ; obj2 .j = " + obj2.j);}}
Resultados em execução:
obj1.i = 10, obj1.j = 20obj2.i = 10, obj2.j = 0
Nota: Embora as variáveis estáticas também possam ser acessadas através de objetos, elas não são recomendadas e o compilador também gerará avisos.
No código acima, é uma variável estática. Isso ocorre porque obj1.i e obj2.i apontam para o mesmo espaço de memória, enquanto obj1.j e obj2.j apontam para diferentes espaços de memória.
Nota: A variável estática será inicializada quando a classe for carregada. Ou seja, desde que a classe seja carregada, ela será inicializada, independentemente de você usar essa variável estática ou não.
Resumo: as variáveis de classe são modificadas com a palavra -chave estática. Alterações nas variáveis afetarão outros objetos. Existem duas maneiras de acessar externamente: acesso através de objetos ou acesso através de nomes de classe.
Método estático
Um método estático é um método que não pode executar operações em um objeto. Por exemplo, o método Pow () da classe de matemática é um método estático com uma sintaxe de matemática.pow (x, a), que é usada para calcular o poder de A de X, e não há necessidade de criar qualquer matemática objetos quando usados.
Como os métodos estáticos não podem operar objetos, as variáveis de instância não podem ser acessadas em métodos estáticos e só podem acessar variáveis estáticas de sua própria classe.
O método estático pode ser usado nas seguintes situações:
Um método não precisa acessar o estado do objeto e seus parâmetros necessários são fornecidos por parâmetros explícitos (por exemplo, math.pow ()).
Um método precisa apenas acessar variáveis estáticas da classe.
Os leitores devem ter notado que Main () também é um método estático que não opera em nenhum objetivo. De fato, não há objetos no momento da inicialização do programa, o método principal () é a entrada no programa e será executado e os objetos exigidos pelo programa são criados.
Resumo das variáveis estáticas e métodos estáticos:
Um método estático de uma classe só pode acessar variáveis estáticas;
Um método estático de uma classe não pode chamar diretamente de métodos não estáticos;
Se a permissão de controle de acesso permitir, variáveis estáticas e métodos estáticos também podem ser acessados através de objetos, mas não são recomendados;
O objeto atual não existe no método estático; portanto, isso não pode ser usado e, é claro, super não pode ser usado;
Métodos estáticos não podem ser substituídos por métodos não estáticos;
O construtor não permite a declaração de estática;
As variáveis locais não podem ser modificadas com estática.
Exemplos de métodos estáticos:
classe pública demonstração {static int sum (int x, int y) {return x + y; "10 + 10 =" + soma);
Resultados em execução:
10+10 = 20
O método estático não requer nenhuma instância da classe a que pertence será chamada, portanto, não há valor para essa e a variável de instância não poderá ser acessada; caso contrário, ela causará um erro de compilação.
NOTA: As variáveis de instância só podem ser acessadas através de objetos e não podem ser acessadas através de classes.
Inicializador estático (bloco estático)
Um bloco é um pedaço de código cercado por aparelhos. Um inicializador estático é um bloco estático que existe em uma classe e fora de um método. Os inicializadores estáticos são executados apenas uma vez quando a classe é carregada (quando a classe é usada pela primeira vez) e é frequentemente usada para inicializar variáveis estáticas.
Código de exemplo:
classe pública demonstração {public static int i; " + i);} public static void main (string [] args) {System.out.println (" Demo.i = " + Demo.i); new Demo (). Test ();}}
O resultado da operação é:
Agora, no estático block.demo.i = 10test Método: i = 10
Importação estática
A importação estática é um novo recurso do Java 5, usado para importar variáveis estáticas e métodos estáticos de classes.
Geralmente, escrevemos isso nas aulas de importação:
Importar packagename.className;
ou
Importar packagename.*;
E a importação estática pode ser escrita assim:
importar packagename estático.classname.methonname;
ou
importar packagename estático.className.*;
Após a importação, você pode chamar diretamente o método estático com o nome do método na classe atual e não precisa mais usar o ClassName.methodName para acessá -lo.
Para variáveis estáticas frequentemente usadas e métodos estáticos, eles podem ser importados estaticamente. A vantagem da importação estática é que ela pode simplificar algumas operações, como o sistema de instrução de saída.out.println (); e diretamente na próxima vez.
Por favor, veja o seguinte código:
Importar java estático.lang.system. );
Resultados em execução:
Um número aleatório gerado: 0,05800891549018705
Palavra -chave final Java: herança de bloco e polimorfismo <br /> em java, ao declarar classes, variáveis e métodos, a palavra -chave final pode ser usada para modificá -la. Os dados modificados pelo final têm as características do "estado final" e significa "final". Os regulamentos específicos são os seguintes:
A classe modificada pelo final não pode ser herdada.
O método de modificação final não pode ser reescrito por subclasses.
A variável modificada pela Final (variável de membro ou variável local) se torna uma constante e só pode ser atribuída uma vez.
A variável de membro modificada pelo final deve ser atribuída ao mesmo tempo que a declaração. usado.
A variável local modificada pelo final pode declarar apenas que não atribui e depois ser atribuída ao mesmo tempo.
Final é geralmente usado para modificar dados que não podem ser alterados à vontade para evitar o uso indevido, como métodos para implementar métodos de triângulo matemático, operações de exponenciação e outras funções, bem como constante matemática π = 3.141593, e = 2.71828 et al.
De fato, para garantir o estado final, a classe java.lang.math que fornece os métodos e constantes acima também foi definida como final.
Deve -se notar que, se uma variável que faz referência a um tipo (o tipo de classe) estiver marcado como final, a variável não puder apontar para qualquer outro objeto. Mas o conteúdo do objeto pode ser alterado, porque apenas a própria referência é final.
Se a variável estiver marcada final, o resultado é torná -lo uma constante. Desejar alterar o valor da variável final causará um erro de compilação. Aqui está um exemplo de definição correta de variáveis finais:
public final int max_array_size = 25;
As constantes não podem ser herdadas porque têm modificação final.
Por favor, veja o seguinte código:
Public Final Demo {Public Static Final Int Total_Number = 5; = ++ total_number; Executar atribuição secundária}}
Final também pode ser usado para modificar as classes (antes da palavra -chave de classe) para impedir que a classe derivasse subclasses. Isso é feito por razões de segurança, porque é necessário garantir que, uma vez que uma string seja referenciada, ela deve ser uma sequência da sequência de classe, não uma string de outra classe (a classe String pode ser herdada maliciosamente e adulterada).
Os métodos também podem ser modificados por final e os métodos modificados pelo final não podem ser substituídos; Uma vez que uma classe é declarada como final, os métodos contidos nessa classe também serão declarados implicitamente como finais, mas a variável não é.
O método modificado pela Final é a ligação estática e não produzirá polimorfismo (ligação dinâmica). Em Java, os métodos modificados por estática ou privada serão declarados implicitamente como final porque a ligação dinâmica não tem significado.
Como a ligação dinâmica consome recursos e geralmente não é necessária, alguns programadores acreditam que, a menos que haja motivos suficientes para usar o polimorfismo, todos os métodos devem ser modificados com o final.
Esse entendimento é um pouco extremo, porque o compilador instantâneo na JVM pode monitorar as informações de operação do programa em tempo real e pode conhecer com precisão a relação de herança entre as classes. Se um método não for substituído e é curto, o compilador poderá otimizá -lo, o que é chamado inline. Por exemplo, uma chamada em linha para e.getName () será substituída pelo acesso à variável E.Name. Essa é uma melhoria significativa, porque a transferência de ramificação usada pela CPU ao processar as instruções que chamam métodos interromperão a política da instrução de pré -busca, portanto isso é considerado impopular. No entanto, se o getName () for substituído em outra classe, o compilador não poderá saber o que o código substituído fará, para que não possa ser inlinhado.