- 1 1. Introduction
- 2 3. Main Use Cases of this
- 3 4. Důležité poznámky při používání this
- 4 5. Praktické příklady kódu
- 4.1 5.1 Rozlišení členových a lokálních proměnných
- 4.2 5.2 Řetězení konstruktorů
- 4.3 5.3 Řetězení metod
- 4.4 5.4 Předávání aktuální instance
- 4.5 6. Často kladené otázky (FAQ)
- 4.6 Q1. Musím psát „this“ celou dobu?
- 4.7 Q2. Co se stane, když použiji this uvnitř statické metody?
- 4.8 Q3. Jaký je rozdíl mezi this a super?
- 4.9 Q4. Jaký je přínos vrácení this v řetězení metod?
- 4.10 Q5. Co se stane, když zapomenu použít this, když je potřeba?
- 4.11 7. Závěr
1. Introduction
Když začnete učit se programovat v Javě, setkáte se s různými klíčovými slovy. Mezi nimi „this“ hraje velmi důležitou roli při pochopení tříd a objektově orientovaných konceptů. Nicméně, protože slovo „this“ v angličtině jednoduše znamená „toto/tento“, mnoho začátečníků zpočátku neví, proč se v programování používá.
Tento článek vysvětluje roli a použití klíčového slova „this“ v Javě srozumitelným a přátelským způsobem pro začátečníky. Naučíte se klíčové body jako rozlišování mezi členskými proměnnými a lokálními proměnnými a používání „this“ uvnitř konstruktorů, spolu s praktickými ukázkami kódu.
Také se budeme věnovat častým otázkám, chybám a důležitým poznámkám. Na konci tohoto průvodce pochopíte, jak this funguje a jak jej použít sebejistě od základních po pokročilé scénáře.
2. What Is the “this” Keyword?
V Javě „this“ odkazuje na aktuální objekt samotný. Když je z třídy vytvořena instance (objekt), klíčové slovo „this“ se používá k odkazu na tento konkrétní objekt.
I když je ze stejné třídy vytvořeno více objektů, this každého objektu odkazuje na jinou instanci. To pomáhá objasnit „který objekt je právě zpracováván“ ve vašem kódu.
The Basic Roles of this
- Přístup k proměnným a metodám instance Použití
this.variableNamenebothis.methodName()vám umožní přistupovat k proměnným a metodám konkrétního objektu. - Rozlišování mezi lokálními a členskými proměnnými Když mají parametry konstruktoru nebo metody stejný název jako členské proměnné, používá se „this“ k jejich rozlišení.
Why do we need “this”?
V Javě můžete vytvořit více objektů z jedné třídy, každý s nezávislým stavem a chováním. Uvnitř těchto objektů potřebujete způsob, jak odkazovat na „tento konkrétní objekt“. To je úkol klíčového slova „this“.
Například uvnitř třídy Person vám použití „this“ umožní vyjádřit „tento konkrétní objekt Person“.
Summary
„this“ je velmi důležitý koncept v objektově orientovaném programování. Funguje jako most, který objektu umožňuje přistupovat k jeho vlastním datům a chování.
3. Main Use Cases of this
Klíčové slovo „this“ se v Javě vyskytuje na mnoha místech. Níže jsou ukázkové příklady s kódem.
3.1 Distinguishing Member Variables From Local Variables
Java často používá stejný název pro parametry konstruktoru a členské proměnné. V takových případech „this“ je rozlišuje.
Example: Distinguishing member variables from local variables
public class Student {
private String name;
public Student(String name) {
this.name = name; // Left: member variable, Right: constructor parameter
}
}
Pokud vynecháte this, lokální proměnná má přednost a členská proměnná nebude správně přiřazena.
3.2 Using this in Constructors
Java umožňuje více konstruktorů pomocí přetížení konstruktorů. Můžete zavolat jiný konstruktor pomocí this(), abyste snížili duplicitní kód.
Example: Calling another constructor with this()
public class Book {
private String title;
private int price;
public Book(String title) {
this(title, 0); // calls another constructor
}
public Book(String title, int price) {
this.title = title;
this.price = price;
}
}
To pomáhá centralizovat logiku inicializace a zabraňuje duplicitnímu kódu.
3.3 Method Chaining
Vrácení this umožňuje volat metody po sobě na stejné instanci.
Example: Method chaining
public class Person {
private String name;
private int age;
public Person setName(String name) {
this.name = name;
return this;
}
public Person setAge(int age) {
this.age = age;
return this;
}
}
// Method chaining
Person p = new Person().setName("佐藤").setAge(25);
This is widely used in builder patterns and configuration classes.
3.4 Předávání aktuální instance
Můžete použít „this“, když potřebujete předat aktuální instanci do jiné metody nebo třídy.
Příklad: Předávání aktuálního objektu
public class Printer {
public void print(Person person) {
System.out.println(person);
}
}
public class Person {
public void show(Printer printer) {
printer.print(this); // passes this instance
}
}
4. Důležité poznámky při používání this
I když je velmi užitečné, „this“ musí být používáno opatrně, aby se předešlo chybám.
4.1 this nelze použít ve statických kontextech
Metoda nebo proměnná static patří samotné třídě – ne instanci – takže „this“ nelze použít.
Neplatný příklad
public class Example {
private int value;
public static void printValue() {
// System.out.println(this.value); // Compile error
}
}
4.2 Nadměrné používání this může snížit čitelnost
Používání „this“ zbytečně může kód ztížit čtení. Používejte ho pouze když je potřeba.
Příklad zbytečného použití
public class Test {
private int x;
public void setX(int x) {
this.x = x; // needed
// this.x = this.x + 1; // excessive use
}
}
4.3 Nepleťte si this se super
- this → aktuální instance
- super → rodičovská (super)třída
Příklad: Použití this vs super
public class Parent {
public void greet() {
System.out.println("Parent method");
}
}
public class Child extends Parent {
public void greet() {
System.out.println("Child method");
super.greet();
}
}
5. Praktické příklady kódu
5.1 Rozlišení členových a lokálních proměnných
public class Account {
private String owner;
public Account(String owner) {
this.owner = owner;
}
public void printOwner() {
System.out.println("Account Owner: " + this.owner);
}
}

5.2 Řetězení konstruktorů
public class Rectangle {
private int width;
private int height;
public Rectangle(int width) {
this(width, 1);
}
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public void printSize() {
System.out.println("Size: " + width + " x " + height);
}
}
5.3 Řetězení metod
public class BuilderExample {
private String name;
private int age;
public BuilderExample setName(String name) {
this.name = name;
return this;
}
public BuilderExample setAge(int age) {
this.age = age;
return this;
}
public void printInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
BuilderExample person = new BuilderExample().setName("山田").setAge(30);
person.printInfo();
5.4 Předávání aktuální instance
public class Notifier {
public void notifyUser(User user) {
System.out.println(user.getName() + " has been notified.");
}
}
public class User {
private String name;
public User(String name) { this.name = name; }
public String getName() { return this.name; }
public void sendNotification(Notifier notifier) {
notifier.notifyUser(this);
}
}
Notifier notifier = new Notifier();
User user = new User("佐藤");
user.sendNotification(notifier);
6. Často kladené otázky (FAQ)
Q1. Musím psát „this“ celou dobu?
A.
Ne vždy. Používejte ho když:
- jména lokálních a členových proměnných se překrývají
- chcete explicitně odkazovat na aktuální instanci
Q2. Co se stane, když použiji this uvnitř statické metody?
A.
Dostanete chybě při kompilaci. Statické metody patří třídě, ne instanci.
Q3. Jaký je rozdíl mezi this a super?
- this : aktuální instance
- super : rodičovská třída
Q4. Jaký je přínos vrácení this v řetězení metod?
Umožňuje po sobě jdoucí volání na stejném objektu, což zlepšuje čitelnost.
Q5. Co se stane, když zapomenu použít this, když je potřeba?
Lokální proměnné mohou přebít členské proměnné, což vede k nesprávným přiřazením a chybám.
7. Závěr
Tento článek vysvětlil Java “this” keyword od základů po praktické použití. Naučili jste se:
- Jak rozlišovat členské proměnné a lokální proměnné
- Jak centralizovat logiku konstruktoru
- Jak vytvářet řetězce metod
- Jak předat aktuální instanci jiným metodám
Také jsme pokryli důležité poznámky, jako jsou:
- “this” nelze použít ve statických kontextech
- Nepřehánějte používání “this”
- Používejte jej správně s “super”
Pochopení toho, jak “this” funguje, učiní návrh vašich Java tříd přehlednějším a sníží počet chyb. Pokračujte v prozkoumávání základů Javy a aplikujte tyto koncepty v reálném kódu.

