palavra-chave final
Visão geral
A palavra-chave final significa final e imutável.
Quatro usos comuns
1. Usado para modificar uma classe.
2. Usado para modificar um método.
3. Usado para modificar uma variável local.
4. Usado para modificar uma variável de membro.
Usado para modificar uma classe
formato:
public final class 类名称{
//内容
}
Significado: a classe atual não pode ter subclasses. (Eunucos)
Nota: Se uma classe for final, todos os métodos de membro não podem ser substituídos. (Porque não há filho)
Usado para modificar um método
Quando a palavra-chave final é usada para modificar um método, o método é o método final, ou seja, não pode ser substituído.
formato:
修饰符 final 返回值类型 方法名称(参数列表){
// 内容
}
Nota: Para classes e métodos, palavras-chave abstratas e palavras-chave finais não podem ser usadas ao mesmo tempo devido a contradições. (Obviamente)
Usado para modificar uma variável local
Depois que final é usado para modificar uma variável local, essa variável não pode ser alterada.
Atribua um valor uma vez e permaneça inalterado por toda a vida.
Para tipos básicos, imutabilidade significa que os dados na variável não podem ser alterados.
Para tipos de referência, imutabilidade significa que o valor do endereço na variável não pode ser alterado.
public class FinalTest {
public static void main(String[] args) {
int num1 = 10;
System.out.println(num1);
num1 = 20;
System.out.println(num1);
final int num2 = 100;
System.out.println(num2);
// num2 = 200; 错误,无法再次赋值。
Student stu1 = new Student("大帅");
System.out.println(stu1);
Student stu2 = new Student("二帅");
System.out.println(stu2);
final Student stu3 = new Student("三帅");
System.out.println(stu3.getName());
// stu3 = new Student("小帅"); 错误报错,stu3地址不可再改变。
stu3.setName("小帅");
System.out.println(stu3.getName());//这个就可以,因为是在引用类型的地址上进行重新赋值,地址并未改变,
}
}
Usado para modificar uma variável de membro
Para variáveis de membro, se você usar a palavra-chave final, então esta variável ainda é imutável,
1. Como as variáveis de membro têm valores padrão, elas devem ser atribuídas manualmente após serem usadas para o final, e os valores padrão não serão mais fornecidos.
2. Para variáveis de membro final, use atribuição direta ou atribuição por meio de métodos de construção. Escolha um dos dois.
3. Deve ser garantido que todos os métodos de construção sobrecarregados na classe irão eventualmente atribuir variáveis de membros finais.
Modificador de permissão
Existem quatro modificadores de permissão em Java
público | protegido | (padrão) | privado | |
---|---|---|---|---|
A mesma classe (eu) | SIM | SIM | SIM | SIM |
O mesmo pacote (eu moro) | SIM | SIM | SIM | NÃO |
Diferentes tipos de pãezinhos (meu filho) | SIM | SIM | NÃO | NÃO |
Pacotes diferentes não são subcategorias (estranhos) | SIM | NÃO | NÃO | NÃO |
Nota: (padrão) não é a palavra-chave "padrão", mas não é escrita.
Classe interna
Visão geral
Se uma transação contém outra transação, então esta é uma classe que contém outra classe.
Por exemplo: a relação entre o corpo e o coração, outro exemplo: a relação entre o carro e o motor.
classificação:
1. Classe interna do membro
2. Classes internas locais (incluindo classes internas anônimas)
Classe interna do membro
Definir o formato
修饰符 class 外部类名称 {
修饰符 class 内部类名称{
//内容
}
}
Entre eles, o uso interno e o uso externo podem ser acessados à vontade, o uso externo e o uso interno requerem objetos internos.
Ou seja, a classe interna pode acessar diretamente os membros da classe externa, incluindo membros privados; se a
classe externa deseja acessar os membros da classe interna, um objeto da classe interna deve ser estabelecido.
Usar classe interna de membro
1. Método indireto: Nos métodos externos e internos, a classe interna é usada, e então o método principal apenas chama a classe externa.
2. Método direto: nome da classe externa. Nome da classe interna nome do objeto = novo nome da classe externa (). Novo nome da classe interna ();
Acesso variável com o mesmo nome da classe interna do membro
public class Body {
int num = 10;
public class Heart{
int num = 20;
public void dongdong(){
int num = 30;
System.out.println(Body.this.num);
System.out.println(this.num);
System.out.println(num);
}
}
}
Classe interna local
Se uma classe é definida dentro de um método, então esta é uma classe interna local.
"Parcial": apenas o método atual pode usá-lo, e não pode ser usado fora deste método.
Definir o formato
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部内部类名称{
//内容
}
}
}
Variáveis locais de classes internas locais
Classe interna local, se você deseja acessar a variável local do método, a variável local deve ser [final efetivo].
Observações: A partir do Java 8+, contanto que os fatos da variável local permaneçam inalterados, a palavra-chave final pode ser omitida.
o motivo:
1. O novo objeto está na memória heap.
2. As variáveis locais seguem o método e estão na memória da pilha.
3. A pilha será exibida imediatamente após a execução do método e as variáveis locais desaparecerão imediatamente.
4. Mas o novo objeto continuará a existir na memória heap até que a coleta de lixo desapareça.
5. Se o objeto ainda está vivo e deseja continuar a usar variáveis locais, porque as variáveis locais anteriores desapareceram, se você quiser usá-las, você pode obter o valor das variáveis locais anteriores no pool constante, então você precisa modificar as variáveis com a palavra-chave final para fazer Não pode ser reatribuído e o valor original sempre pode ser salvo.
Modificador de permissão de resumo
público> protegido> (padrão)> privado
Ao definir uma classe, as regras do modificador de permissão:
1. Classe externa: pública / (padrão)
2. Classe interna do membro: pública / protegida / (padrão) / privada
3. Classe interna local: nada pode ser escrito (diferente do padrão)
Classe interna anônima (ênfase)
Visão geral
Se a classe de implementação da interface (ou uma subclasse da classe pai) precisa ser usada apenas uma vez,
Nesse caso, você pode omitir a definição da classe e usar [classe interna anônima].
O formato de definição da classe interna anônima:
Nome da interface nome do objeto = novo nome da interface () {
// Sobrescrever e reescrever todos os métodos abstratos
};
Análise
Analise o formato "nome da nova interface () {}":
1.new representa a ação de criar um objeto
2. O nome da interface é a interface que a classe interna anônima precisa implementar
3. {...} Este é o conteúdo da classe interna anônima
Nota
- Uma classe interna anônima pode ser usada apenas uma vez ao criar um objeto. Se você quiser usá-lo várias vezes e o conteúdo da classe for o mesmo, você deve usar uma classe de implementação definida separadamente.
- Objetos anônimos só podem ser chamados uma vez em [método de chamada]. Se quiser chamar vários métodos no mesmo objeto, você deve dar um nome ao objeto.
- As classes internas anônimas omitem [nome da classe / subclasse de implementação], mas os objetos anônimos omitem [nome do objeto]. Classes internas anônimas e objetos anônimos não são a mesma coisa. (Basicamente, nenhum problema de compreensão)
Classe como tipo de variável de membro
Veja Sum.Demo01
Interface como um tipo de variável de membro
Veja Sum.Demo02
Interface como parâmetro de método ou valor de retorno
public class demo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();//左边是接口名称,右边是类名称,这就是多态写法
demo.addList(list);
System.out.println(list);
}
public static List<String> addList(List<String> list){
list.add("你好");
list.add("你好啊");
list.add("你好啊啊");
list.add("你好啊啊啊");
return list;
}
}