[Java] Ainda não entende a palavra-chave this? Entenda completamente esta palavra-chave em um minuto

insira a descrição da imagem aqui

insira a descrição da imagem aqui

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 .


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】:insira a descrição da imagem aqui

  • 【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!
      insira a descrição da imagem aqui

    • 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!

insira a descrição da imagem aqui

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 newum 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-staticatributos, 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]:
    insira a descrição da imagem aqui

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-staticmodificada)
    • 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(参数列表)
  • [Nota]:this(参数列表) Para acessar o construtor desta classe, você precisa se atentar aos seguintes pontos
    • Só pode ser usado no construtor, outhis(参数列表); seja, acesso a outro construtor dessa classe em um construtor. ( O construtor padrão começa com super();,).
    • Quando usado explicitamente this(), o padrão super()é substituído
    • this(参数列表)e super(参数列表)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áticosstatic 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类名.静态方法
//错误代码:
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 newum 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:

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!

insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/Yaoyao2024/article/details/128753927
Recomendado
Clasificación