A Palavra-chave this
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 4 de 87.
A palavra-chave this refere-se à instância atual de uma classe. Ela distingue entre campos e parâmetros com o mesmo nome.
Sem o this, o parâmetro sombreia o campo
public class Person {
private String name;
public Person(String name) {
name = name; // Atribui o parâmetro a si mesmo!
}
}Usando this para atribuir valores corretamente
public class Person {
private String name;
public Person(String name) {
this.name = name; // Atribui o parâmetro ao campo
}
public String getName() {
return this.name;
}
}Usando this em métodos
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getDescription() {
return this.name + " is " + this.age + " years old";
}
}A palavra-chave this sempre aponta para o objeto atual. É essencial quando os nomes dos parâmetros coincidem com os nomes dos campos, evitando confusão e bugs.
Desafio
MédioComplete a classe Person usando a palavra-chave this para distinguir entre campos e parâmetros:
- Um construtor que usa
thispara atribuir parâmetros a campos - Métodos getter usando
thispara acessar campos - Um método
getDescription()que retorna"<name>, age <age>, from <city>"
Folha de consulta
A palavra-chave this refere-se à instância atual de uma classe e distingue entre campos e parâmetros com o mesmo nome.
Sem o this, o parâmetro sombreia o campo:
public Person(String name) {
name = name; // Assigns parameter to itself!
}Usando this para atribuir valores corretamente:
public Person(String name) {
this.name = name; // Assigns parameter to field
}Usando this em métodos getter:
public String getName() {
return this.name;
}Usando this com múltiplos campos:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getDescription() {
return this.name + " is " + this.age + " years old";
}
}Experimente você mesmo
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = Integer.parseInt(scanner.nextLine());
String city = scanner.nextLine();
Person person = new Person(name, age, city);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("City: " + person.getCity());
System.out.println(person.getDescription());
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Iterator