Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Gostaria de uma outra visão sobre o this

O this serve para colocarmos valor em um atributo em que chamamos dentro de um metodo? É que eu fiz esse exercicio e vi que ele também pode ser feito sem o this.


public class Andarilho {

    String nomeAndarilho;
    int kmCaminhados;

    void exibeKmCaminhados(String nome, int km) {
        System.out.println("O andarilho cuja o nome é "
    + this.nomeAndarilho + " andou " + this.kmCaminhados +
    " km");

    }
}

public class CriaAndarilho {

    public static void main(String[] args) {

        Andarilho andarilho = new Andarilho();
        andarilho.nomeAndarilho = "Paulo Silveira";
        andarilho.kmCaminhados = 30;
        andarilho.exibeKmCaminhados(andarilho.nomeAndarilho, 
andarilho.kmCaminhados);

    }

}

Mas eu poderia cria-lo sem o this, que funcionaria. Exemplo:


public class Andarilho {

    String nomeAndarilho;
    int kmCaminhados;

    void exibeKmCaminhados(String nome, int km) {
        System.out.println("O andarilho cuja o nome é "
    + nome + " andou " + km + " km");

    }
}

public class CriaAndarilho {

    public static void main(String[] args) {

        Andarilho andarilho = new Andarilho();
        andarilho.exibeKmCaminhados("Paulo Silveira", 30);

    }

}
6 respostas

Boa tarde Lucas, tudo bem?

O this é utilizado para referenciar um atributo da própria classe, ele não é obrigatório, mas deixa o código mais legível.

Sobre os exemplos, não fizeram muito sentido, principalmente o primeiro. No método exibeKmCaminhados você pediu que passasse o nome do andarilho e o km andados, então não faz sentido você pegar os atributos da classe.

Teria que ser assim se você quisesse que o usuário passa-se um valor:

public class Andarilho {

    String nomeAndarilho;
    int kmCaminhados;

    public void exibeKmCaminhados(String nome, int km) {
        System.out.println("O andarilho cuja o nome é "
        + nome + " andou " + km + " km");
    }
}

Agora, se o seu objetivo é pegar as informações do próprio objeto, teria que ser assim:

public class Andarilho {

    String nomeAndarilho;
    int kmCaminhados;

    public void exibeKmCaminhados() {
        System.out.println("O andarilho cuja o nome é "
        + this.nomeAndarilho + " andou " + this.kmCaminhados + " km");
    }
}

Espero ter te ajudado :)

Vê se eu entendi. Quando eu colocar parâmetros no método, eu não preciso referenciar com o this, porque eu estou pedindo para o usuário. Mas se eu for referência com o this, não preciso colocar parâmetros, já que estou referenciado atributos. É tipo isso?

Vc usa o this quando for referenciar os parâmetros globais da classe. Veja esse exemplo:

public class Pessoa {

    String nome;

    void exibeNome() {
        System.out.println(this.nome);
    }

    void exibeNomeRecebido(String nome) {
        System.out.println(nome);
    }
}

No primeiro método (exibeNome()), é apresentado o valor do atributo nome dentro da classe pessoa.

No caso do segundo método (exibeNomeRecebido), é apresentando o nome recebido por parâmetro.

Se no segundo método usássemos o this antes do nome (this.nome), seria apresentando o valor do atributo nome dentro da classe pessoa e não o valor do atributo recebido por parâmetro.

Conseguiu entender?

Acho que entendi, quando uusado o this é para referenciar um atribuído de um objeto. No primeiro código seu, vc tá referenciado o atributo nome do objeto. E no segundo código, o parâmetro só existe dentro do metodo e não referência nenhum atributo. certo?

É isso aí! o this ele serve pra falar de um contexto. Dentro da classe pessoa, vc vai ter atributos do contexto dessa classe. Se por exemplo, no método exibeNomeRecebido o nome do atributo do método fosse "String nomeRecebido", e vc escrevesse "this.nomeRecebido", veria que isso não iria compilar o a IDE mostraria erro, porque "nomeRecebido" não existe no contexto this (que nesse caso é classe Pessoa)

solução!

Complementando: "this" em inglês significa "esse". Então quando vc usa "this.nome", vc ta basicamente dizendo "esse.nome". No caso esse seria "esse contexto"