Java estática da classe interna <r /> definir uma classe interna como uma classe estática é basicamente a mesma que definir outras classes como classes estáticas, e as regras de referência são basicamente as mesmas. No entanto, os detalhes ainda são muito diferentes. Especificamente, existem principalmente as seguintes áreas para atrair a atenção de todos os desenvolvedores do programa.
(1) De um modo geral, se uma classe interna não for definida como uma classe interna estática, ela não poderá ser definida como uma variável estática e um método estático ao membro ao definir variáveis de membro ou métodos de membros. Ou seja, os membros estáticos não podem ser declarados em classes internas não estáticas.
(Ii) Geralmente, as classes externas não estáticas podem acessar variáveis e métodos de seus classes externas à vontade (incluindo métodos declarados como privados). limitações. Uma classe interna estática não pode acessar variáveis e métodos não estáticos de membros de sua classe externa.
(3) Ao criar uma classe interna não estática em uma classe, há uma disposição obrigatória, ou seja, instâncias de classes internas devem estar vinculadas a instâncias de classes externas. Em seguida, você precisa definir uma classe interna estática em uma classe externa e não precisa usar a palavra -chave nova para criar uma instância da classe interna. Ou seja, ao criar um objeto interno de uma classe estática, não são necessários objetos de sua classe externa.
Java usa a seguinte classe interna ao implementar o LinkedList:
classe pública LinkedList <E> estende a lista de implementos abstrateStenseStencialList <E> {E elemento; OUS anterior; ;
Aqui está o uso típico de classes internas estáticas
Classe de ferramenta de sincronização Java
/** * Os threads múltiplos precisam ser iniciados para importar dados da interface para o destino em lotes. que é a essência do problema de sincronização * entre thread. Isso permite que ele seja concluído antes de concluir um conjunto de operações * executadas em outros threads. * Inicialize o CountdownLatch com a contagem fornecida. Como o método Countdown () é chamado, o método * aguarda será bloqueado até que a contagem atual atinja zero. Depois disso, todos os threads de espera serão lançados e todas as chamadas subsequentes para aguardar serão devolvidas imediatamente. * Esse fenômeno ocorre apenas uma vez - a contagem não pode ser redefinida (isso é muito importante). Se você precisar redefinir a contagem, considere o uso do ciclicBarrier. * O seguinte é um exemplo simples para simular esse requisito. * Classe, seu conteúdo de classe é relativamente complexo **/ Importar java.util.arraylist; <Inteiro> strlist = null; } public static void main (string args []) {boolean isend = true; )> :::::::::::::::::::::::::Here ::::::::::::::: 0 && count <20) {Countdownlatch startignal = new Countdownlatch (1); ++ i) {novo thread (D.New Worker (startignal, Donesignal, i)). Start (); ) {Random r = novo Random (); (); Adicionar (i); Final Countdownlatch DonesSign; Para o thread principal executar a contagem regressiva do AIT (); ) {int start = (i)*(50/5); strlist.get (i) + "---" + "excluído");