- Introdução ao blogueiro: um programa preparatório para estudar muito ~
- Página inicial do blogueiro: @is Yaoyaozi
- A coluna a que pertenço: Adventures in Java Island [The Road from Little White to Big Brother]
prefácio
Pergunta: Por que isso existe
No artigo [JavaSE] anterior Compreendendo Construtor/Construtor (Cunstructor) , já vislumbramos a ponta do iceberg dessa palavra-chave no construtor. Você já pensou por que devemos usá -lo this.属性
em vez de diretamente no construtor de uma classe 属性
? Afinal, em uma classe, não importa por qual palavra-chave o atributo é modificado, ele pode ser acessado na classe. Seguindo esta pergunta, hoje Yao Yaozi levará você para analisar profundamente a palavra-chave this em Java , para que todos possam entender completamente a palavra-chave this .
Índice
Parte1: isso no construtor
1.1 Conhecendo isso pela primeira vez:
public class Account {
private String name;
private double balance;
private String pwd;
//Account类的一个构造器
public Account (String name,double balance,String pwd){
//构造器的实现---初始化对象
this.name = name;
this.balance = balance;
this.pwd = pwd;
}
}
- [Pensando]: O que acontecerá se isso não for usado?
class Account {
private String name;
private double balance;
private String pwd;
//Account类的一个构造器
public Account(String name, double balance, String pwd) {
//构造器的实现---初始化对象
//不用this
name = name;
balance = balance;
pwd = pwd;
}
public void showInfo() {
System.out.println("name:" + name + " " + "balance:" + balance + " " + "pwd:" + pwd);
return;
}
}
public class Main {
public static void main(String[] args) {
Account account = new Account("Yaoyao", 20, "123456");
account.showInfo();
}
}
-
【resultado da operação】:
-
【Explicação】:
-
Pensávamos que a variável à esquerda era uma variável de membro, mas, na verdade, a variável à esquerda é uma variável local! Ou seja, a variável local é atribuída à variável local e a variável de membro não mudou nada e ainda é o valor padrão!
-
As variáveis do método são variáveis locais , armazenadas na pilha , e o escopo da ação está dentro do método ; queremos inicializar as variáveis membro por meio do construtor , armazenado no heap , e o escopo da ação está dentro da classe .
Quando a variável de membro e a variável local têm o mesmo nome , a variável local é usada primeiro . A chave é ver se existem variáveis locais.Se houver variáveis locais, as variáveis locais são usadas primeiro, caso contrário, o atributo - o princípio da proximidade!
-
1.2: Por que isso?
Por meio da análise acima, descobrimos que quando a variável local e a propriedade têm o mesmo nome, a propriedade não pode ser inicializada com êxito no construtor. Estamos pensando, se a variável que pode ser atribuída não for uma variável local no construtor, mas uma variável membro, esse problema não seria resolvido? Sim, então existe isso!!!
public class Account {
private String name;
private double balance;
private String pwd;
//Account类的一个构造器
public Account (String name,double balance,String pwd){
//构造器的实现---初始化对象
this.name = name;
this.balance = balance;
this.pwd = pwd;
}
}
Desta forma, passa-se this.属性
a indicar que se trata de uma variável membro, que se distingue das variáveis locais .
Parte 2: esta introdução
2.1: O que exatamente é isso?
- Mais explicações oficiais:
A Java Virtual Machine (JVM) atribuirá um this a cada objeto para representar o objeto atual ,
Ver essa frase é realmente irritante, parece que é o caso, certo? Mas não parece muito comum. Yao Yaozi fala a linguagem humana!
Explique em termos humanos:
- Na verdade, isso pode ser entendido como um atributo (variável de membro) do objeto , mas esse atributo é oculto , ou seja, isso equivale a um atributo oculto do objeto.
- Assim como outras propriedades de
new
um objeto, quando um novo objeto é criado, o espaço é alocado para o objeto na memória heap e as propriedades são armazenadas nesse espaço. E o valor do atributo this é o endereço do objeto na memória heap , ou seja, this aponta para o objeto (este representa o objeto).
[Pontos principais] Resumindo: este é um atributo oculto de um objeto (essencialmente uma variável de membro comum). Como outros non-static
atributos, cada novo objeto receberá uma variável de membro dedicada do objeto quando o objeto for criado (este é um deles. ), essa variável de membro é armazenada na memória heap e o valor dessa variável é o endereço do objeto na memória heap.
Ou seja: para criar 1.000 objetos, haverá 1.000 thiss, e eles são independentes um do outro (oh, isso é apenas uma variável de membro comum!)
- [Ilustração]:
Parte 3: detalhes e precauções de uso
- A palavra-chave this pode ser usada para distinguir propriedades e variáveis locais da classe atual.
- O uso da palavra-chave this pode ser usado para acessar as propriedades de instância, métodos de instância e construtores desta classe ("instância" refere-se à
non-static
modificada)- Acesse as propriedades de instância desta classe:
this.属性
- Acesse os métodos de instância desta classe:
this.方法名(参数列表)
- Acesse este construtor de classe:
this(参数列表)
- Acesse as propriedades de instância desta classe:
- [Nota]:
this(参数列表)
Para acessar o construtor desta classe, você precisa se atentar aos seguintes pontos- Só pode ser usado no construtor, ou
this(参数列表);
seja, acesso a outro construtor dessa classe em um construtor. ( O construtor padrão começa comsuper();
,). - Quando usado explicitamente
this()
, o padrãosuper()
é substituído this(参数列表)
esuper(参数列表)
Só pode haver um e apenas um deles no construtor.- Se usado em um construtor
this(参数列表)
, esta instrução só pode ser colocada na primeira linha do construtor - Não pode ser usado em métodos estáticos
static method
de classes . É muito simples de entender: variáveis de membro não podem aparecer em métodos estáticos (isso depende de objetos, e static não depende de objetos. Quando não há objeto, como você pode fazer isso parecer desconfortável! Ele nem sabe qual objeto ele pertence!) No tutorial de nível de babá [JavaSE] | 10.000 palavras + 10 imagens para aprender classes e objetos – é recomendável marcar a Parte 4 e a Parte 5 desta postagem do blog , que foram explicadas em detalhes sobre métodos membros e métodos estáticosthis
类名.静态方法
- Só pode ser usado no construtor, ou
//错误代码:
public class Account {
private String name;
private double balance;
private String pwd;
public static void show(){
System.out.print(name);//编译出错:实例变量依赖于对象
System.out.print(this.name);//编译出错,this.name依赖对象
}
}
- Uma solução estúpida haha: já que você precisa de um objeto, então eu farei
new
um haha, para que todas as variáveis de instância e métodos pertençam ~
public class Account {
private String name;
private double balance;
private String pwd;
public static void show(){
Account account = new Account();//创建对象
System.out.print(account.name);
}
}
A próxima visualização - uma explicação detalhada do Java -
série de colunas do pacote:
- [JavaSE] Um artigo para entender o método construtor/construção (Cunstructor)
- [JavaSE] Tutorial nível babá | 10.000 palavras + 10 imagens para aprender classes e objetos – coleção recomendada
- 【JavaSE】Várias ilustrações, explicação detalhada em nível de babá sobre arrays e arrays bidimensionais – coleção recomendada
Não é fácil ser original, se for útil para você, siga em frente! Eu sou Yaoyaozi e continuo a produzir artigos de alta qualidade!