CodeGym /Blogue Java /Random-PT /Java esta palavra-chave
John Squirrels
Nível 41
San Francisco

Java esta palavra-chave

Publicado no grupo Random-PT
No CodeGym, os alunos são apresentados ao Java esta palavra-chave literalmente desde as primeiras aulas. Com o tempo, seu significado se torna claro. Mas, olhando para trás, muitas pessoas provavelmente admitem para si mesmas que por muito tempo não conseguiram entender o Zen dessa palavra-chave. Este artigo abrirá a cortina que cobre os segredos da palavra-chave this para quem ainda não foi capaz de fazê-lo... Eu tenho a referência Java de Schildt , então na página 171 você pode ver que a palavra-chave this é necessário para um método referenciar o objeto que o chamou. Poderíamos terminar a aula com isso. Mas precisamos de detalhes. Como regra, você precisa usar isso em dois casos:
  1. Quando uma variável de instância e uma variável de método/construtor têm o mesmo nome;
  2. Quando você precisa chamar um tipo específico de construtor (por exemplo, um construtor padrão ou construtor parametrizado) de outro tipo de construtor. Isso também é chamado de chamada de construtor explícita.
E é isso - existem apenas dois casos em que essa palavra-chave temível é usada. Agora vamos ver esses dois casos em exemplos.

Exemplo 1: Uma variável de instância e uma variável de método têm o mesmo nome.

Suponha que temos uma classe Human que define um campo de nome: Vamos criar um setter para a variável de nome (o setter é totalmente funcional — não há problema aqui):

class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
Observe que passamos String newName para o método setter setName . Declaramos uma nova variável e poderíamos nomeá-la como quiséssemos porque ela ficará visível apenas entre as chaves ({}) que envolvem o método setName . Observe que o setter tem uma única linha:

name = newName;
Aqui introduzimos uma nova variável chamada newName e atribuímos ela à variável de nome existente do objeto . Muitos programadores podem achar estranho introduzir uma variável com um novo nome quando, no final das contas, estamos falando da mesma coisa. Ou seja, estamos falando do campo name da classe Human . É por isso que os criadores de Java pensaram em uma maneira de usar convenientemente o mesmo nome de variável. Em outras palavras, por que ter dois nomes para uma variável denotando a mesma coisa? Em outras palavras, queremos fazer algo assim:

class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
Mas aqui encontramos um problema . Agora temos duas variáveis ​​com o mesmo nome. Um nome String pertence à classe Human , enquanto o outro nome String pertence ao seu método setName . Como resultado, a JVM não saberia a qual variável você está se referindo ao escrever a seguinte linha no setter:

name = name;
Java assume que você quer dizer a variável de nome mais próxima , ou seja, aquela do método setName : A palavra-chave this (com exemplos) - 3Portanto, você está simplesmente atribuindo a variável de nome do método a si mesma. O que obviamente não faz o menor sentido. Portanto, a linguagem precisava de alguma forma para distinguir a variável name da classe Human da variável name no método setName . Este problema foi resolvido introduzindo a palavra-chave this , que neste caso indica que você pretende referenciar a variável associada a uma instância da classe Human , não a variável do método: Ou seja, thisA palavra-chave this (com exemplos) - 4refere-se ao objeto de chamada, como mencionamos no início do artigo. Como resultado, o método setName define o nome da pessoa no objeto criado. Abaixo está o código do programa sem usar a palavra-chave this . O código cria um objeto Human e atribui um nome a ele: A palavra-chave this (com exemplos) - 5E aqui está o código com a palavra-chave this :

public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        human1.print();
    }
}
class Human {
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print() {
        System.out.println(name);
    }
}
Assim, isso nos permite evitar a introdução de novas variáveis ​​para denotar a mesma coisa, tornando o código mais limpo e menos confuso com variáveis ​​extras.

Exemplo 2: usando isso para uma chamada de construtor explícita

Chamar um construtor de outro pode ser útil quando você tem (estranhamente) vários construtores e não deseja que o novo construtor duplique o código de inicialização escrito anteriormente em um construtor diferente. Confuso? Não é tão assustador quanto parece. Observe o código abaixo. Possui dois construtores para a classe Human :

class Human {
    int age;
    int weight;
    int height;

    Human(int age, int weight) {
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
Aqui fornecemos primeiro um construtor com dois parâmetros: int age e int weight . Suponha que ele tenha duas linhas de código:

this.age = age;
this.weight = weight;
Posteriormente, decidimos adicionar outro construtor com três parâmetros, adicionando altura aos parâmetros idade e peso existentes. Você poderia escrever o novo construtor assim:

this.age = age;
this.weight = weight;
this.height = height;
Mas, em vez de repetir o código existente neste construtor, você pode usar a palavra-chave this para chamar explicitamente o construtor com dois parâmetros:

this(age, weight);
// and then initialize the missing variable:
this.height = height;
É como se estivéssemos dizendo ao construtor de três parâmetros:
  • chame esse outro construtor que tem dois parâmetros
  • e, em seguida, adicione outra variável.
Isso é tudo =). Por fim, notamos que em Java a palavra-chave this é usada apenas em métodos e construtores. Mas isso é passado implicitamente para todos os métodos não estáticos (é por isso que geralmente é chamado de parâmetro implícito) e pode ser usado para se referir ao objeto que chamou o método. Não tenha medo dessa palavra-chave, porque isso não é assustador.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION