Estático é outra palavra -chave importante em Java. Ele pode melhorar o desempenho em execução do programa e otimizar a estrutura do programa. Suas principais aplicações são as seguintes:
1. As variáveis de membro modificadas pela estática, chamadas variáveis de classe/variáveis estáticas, para realizar o compartilhamento de todos os objetos a esse membro.
2. O método do membro modificado pela estática, chamado método de classe/método estático, pode ser chamado diretamente através do nome da classe sem criar um objeto.
3. Formulário de blocos de código estático para otimizar o desempenho do programa.
4. Pacotes de chumbo estático, geralmente importam métodos de classe diretamente para a classe atual, para que os métodos de classe possam ser chamados diretamente usando o nome do método, que é mais conveniente.
5. Modifique a classe interna e ligue para a classe interna sem instanciar a classe externa.
A seguinte descrição do código está anexada:
Public Class Student {Nome da String; estática intra -estática; public string tostring () {return "nome:" + nome + ", idade:" + idade; } public static void main (string [] args) {Student s1 = new Student (); s1.name = "Zhang San"; s1.age = 20; Aluno s2 = novo aluno (); s2.name = "li si"; s2.age = 10; System.out.println (S1); System.out.println (S2); }}/** Nome do resultado da saída: Zhang San, idade: 10name: li si, idade: 10*/Como mencionado acima, os dois objetos S1 e S2 são armazenados em diferentes endereços na área de heap na memória, para que não interfiram entre si. No entanto, a palavra -chave estática modifica a idade variável do membro, tornando -a a classe a que o objeto pertence a ele, e qualquer objeto na instância dessa classe pode ser compartilhado e usado. Portanto, as idades de saída são todas atribuídas a 10. Se você remover estática, obviamente os objetos não se afetarão e a saída é a seguinte:
Nome: Zhang San, Idade: 20Nome: Li Si, idade: 10
Como mencionado acima, ocorreu um erro quando o Out1 é chamado 2. A partir deste código, pode-se observar que os métodos estáticos não podem chamar variáveis não estáticas e métodos de membros. Métodos não estáticos podem chamar variáveis estáticas de membros e métodos de membros. Observe que a estática não afeta os direitos de acesso dos membros. As palavras -chave que podem afetar os direitos de acesso em Java são privados, públicos, protegidos e padrão.
A classe pública teste estende a base {static {System.out.println ("estático estático Bloco 1"); } public test () {System.out.println ("Test construtor"); } public static void main (string [] args) {new test (); }} classe base {static {System.out.println ("Bloco estático 2"); } public base () {System.out.println ("construtor de base"); }}Como mencionado acima, lembre -se de duas frases, o bloco de código estático é carregado com o carregamento da classe. O método variável modificado pela estática é carregado primeiro e apenas uma vez que outros métodos variáveis. Quando uma subclasse é carregada, a classe pai será carregada primeiro. A partir disso, podemos analisar: no início da execução, devemos primeiro encontrar o método principal, porque o método principal é a entrada do programa, mas antes de executar o método principal, devemos primeiro carregar a classe de teste. Ao carregar a classe de teste, descobrimos que a classe de teste herda da classe base, para que voltemos para carregar a classe base primeiro. Ao carregar a classe base, descobrimos que existe um bloco estático e, em seguida, execute o bloco estático. Depois que a classe base é carregada, a classe de teste continua a carregar e, em seguida, descobre que existem blocos estáticos na classe de teste, para que o bloco estático seja executado. Depois de carregar a classe necessária, o método principal começa a ser executado. Ao executar o novo teste () no método principal, o construtor da classe pai será chamado primeiro e depois o construtor próprio. Portanto, os resultados da operação são os seguintes:
Bloco estático Bloco 2stático Bloco estático 1Base Construtor Construtor
/* A.Java Arquivo*/pacote com.dogo.test; public Classe A {public static void outword (objeto o) {System.out.println (O); }}/*Arquivo b.java*/importar com.dogo.test.a. } /** saída*Hello World! */}Como mencionado acima, A.java contém um método estático simples. Em B.Java, usamos a palavra -chave estática para importar a classe A. Portanto, não há necessidade de usar o "nome da classe. Nome do método" para chamar o método da classe. Você pode usar diretamente o "nome do método" para chamar o método de classe, assim como o método próprio da classe.
/*Outer.java*/public class Outer {static {System.out.println ("Bloco estático externo"); } public Outer () {System.out.println ("Construtor externo"); } classe estática interna {static {System.out.println ("Bloco estático interno"); } public interno () {System.out.println ("Construtor interno"); }}}/*Test.java*/public class Test {public static void main (string [] args) {new Outer.inner (); }}Como mencionado acima, lembre -se de modificar a classe interna com estática, a classe externa pode chamar diretamente a classe interna, porque a classe interna modificada pela estática é carregada ao carregar a classe externa, para que você possa chamar diretamente a classe interna estática sem instantar a classe externa. No exemplo, antes de inserir o método principal de teste, carregue a classe de teste e execute o novo Outer.inner (); NOTA AQUI: Como o interno é estático, não há necessidade de carregar classes externas e instanciar classes externas aqui. O interno pode ser carregado e instanciado diretamente. Os resultados da operação são os seguintes:
Construtor interno interno do bloco estático
Da Qiao Nota: Outra aplicação muito importante da estática é implementar o padrão de design de singleton. A característica do padrão de interesse único é que a classe pode ter apenas uma instância. Para cumprir essa função, o construtor de classe deve estar oculto, ou seja, o construtor é declarado como privado e fornece um método para criar um objeto. Como o construtor é declarado como privado, o mundo exterior não pode criar diretamente um objeto desse tipo e só pode obter o objeto de classe através dos métodos fornecidos pela classe. Portanto, o método de criar um objeto só pode ser declarado como estático. O exemplo do programa é o seguinte:
classe SingledEMo {private static singledemo ins = null; Private SingleDemo () {} public static SingleDemo getins () {if (ins == null) {ins = new SingleDemo (); } retornar Ins; }}