Recentemente, usei o pensamento em Java que assisti quando estava fora do trabalho. Eu senti que era muito diferente da primeira vez que assisti. Vamos falar sobre a relação entre objetos e referências em Java, bem como o conceito de classes internas.
1. Tudo em Java é um objeto
Qual é o objeto do operador em java? A resposta é uma cotação, que é como um ponteiro em C ou C ++.
Se você tiver uma referência, deve associá -lo a um objeto no momento, caso contrário, a referência não será deixada ao seu controle como você pensa. Por exemplo, você cria uma referência de string:
Strings s;
Não está associado a nenhum objeto no momento. Se você fizer algumas operações no momento, como chamar alguns métodos de string, definitivamente haverá problemas (exceto alguns tipos básicos, porque quando você os definir, eles serão atribuídos ao valor inicial); portanto, você deve associar dinheiro ao objeto ao usá -lo:
String s = new string ();
ou
String s = "Meu nome é Ajun";
Apenas faça assim.
2. Como se associar a objetos
Em Java, um objeto geralmente é criado através de novo para associar a referências, como:
String s = new string ("Meu nome é Ajun"); Isso não apenas cria um objeto para associar referências, mas também o inicializa para colegas, mas também cria nosso próprio tipo de objeto.
3. Localização de armazenamento
(1) Pilha: Geralmente, a pilha armazena referências e variáveis de tipo básico. A pilha aloca principalmente e libera memória movendo o ponteiro da pilha para cima e para baixo.
As variáveis do tipo básico não são adequadas para a nova criação porque ocupam menos memória.
(2) Heap: Usado para armazenar objetos Java. Quando o programa executa novo, o heap alocará um espaço para esse objeto. Lembre -se de que o heap usa mais tempo para alocar e liberar memória do que a pilha para armazenar e liberar memória. É por isso que as variáveis do tipo básico precisam ser armazenadas na pilha, porque as variáveis básicas do tipo são usadas com mais frequência, com frequência com frequência e libera memória e, quando consumidas mais, o desempenho pode ser imaginado.
4. Classe interna
(1) Conhecimento básico das categorias internas:
Geralmente, as classes definidas nas classes Java se tornam classes internas podem ser divididas em: classes definidas fora do corpo do método, classes definidas dentro do método e classes internas estáticas (definidas apenas fora do método), descrição de classes internas anônimas:
Defina a classe fora do método:
As variáveis de membro da classe (estática, não estática) podem ser acessadas. Para garantir que as variáveis do membro da classe possam ser referenciadas corretamente, você deve primeiro instanciar o objeto da classe externa antes de instantar as permissões de acesso ao objeto da classe interna. Você pode tratá -lo como uma variável de membro da classe, para entender muito mais.
Classes definidas no corpo do método;
As variáveis de membro da classe (estática, não estática) podem ser acessadas. Para garantir que as variáveis do membro da classe possam ser referenciadas corretamente, você deve primeiro instanciar o objeto da classe externa antes de instantar o objeto da classe interna, não pode ter direitos de acesso e apenas tratá -lo como uma variável local do método.
Classe interna estática:
Acesso a qualquer classe interna anônima apenas acessando variáveis estáticas de membros da classe:
As variáveis de membro da classe (estática, não estática) podem ser acessadas. Para garantir que as variáveis do membro da classe possam ser referenciadas corretamente, é necessário instanciar o objeto da classe externa antes da instanciação do objeto da classe interna não pode ter (2). O papel da classe interna pode ocultar a classe muito bem. Geralmente, a classe não permite o acesso padrão privado.
As classes internas podem implementar a herança múltipla, compensando as características que Java não pode herdar mais (3), exemplos
pacote com.ajun.test.innerclass.example; / ** * Conteúdo da fruta * @Author Administrator * */ Public Interface Contents {String value (); } pacote com.ajun.test.innerclass.example; / ** * Destino de frutas * @Author Administrator * */ Public Interface Destination {// Destination string readlabel (); } pacote com.ajun.test.innerclass.example; public class Merchers {Private String des = "Is Ruit !!"; // Método classe privada externa conteúdo implementa o conteúdo {private string name = "Apple"+DES; @Override public string value () {retornar nome; }} // Classe privada externa GDestinação implementa Destino {Private String Label; gDestinação privada (etiqueta de string) {this.label = LABEL; } @Override public string readlabel () {return rótulo; }} // Classe interna anônima Public Destination GetDestination (Final String Label) {return New Destination () {@Override public String readLabel () {return Label; }}; } destino público destinat (strings) {return New Gdestination (s); } public content content () {return new Content (); } Public Destination Dest2 (strings) {classe gDestination implementa o destino {Private String Label; gDestinação privada (etiqueta de string) {this.label = LABEL; } @Override public string readlabel () {return rótulo; }} retornar novo (s) gDestination (s); }} pacote com.ajun.test.innerclass.example; classe pública teste {public static void main (string [] a) {bens gs = new bens (); Conteúdo c = gs.content (); Destino d = gs.Dest ("Pequim"); System.out.println (c.Value ()); System.out.println (D.ReadLabel ()); Destino d1 = gs.getDestination ("shanghai"); System.out.println (d1.readLabel ()); System.out.println (Gs.Dest2 ("Tianjin"). ReadLabel ()); }}Conteúdo e gdestinação estão bem ocultos. Ao ligar para fora, você não sabe de qual classe é chamada, para que essa classe tenha vários recursos de herança.
Saída;
Apple é ruit !! Pequim Shanghai Tianjin