Java. konstruktory i słówko *this*

0

Privet
Kto może objaśnić po co używamy konstruktorów ?
Czy możemy zapisywać taki kod bez słówka THIS?
Jaka różnica jest, kiedy używamy this, a kiedy nie?(Ponieważ wszystko jedno kod działa w obu sytuacjach.)

package javaapplication11;

public class Person {
    String name;
    int age;
    String character;
    
    Person()
    {
        name = "Undefined";
        age = 18;
    }
    Person(String n)
    {
        name = n;
        age = 18;
    }
    Person(String n, int a)
    {
        name = n;
        age = a;
    }
    void displayInfo(){
        System.out.printf("Name: %s \tAge: %d\n", name, age);
    }
}

1
  1. konstruktorów używa się aby utworzyć obiekt (poczytaj o tym w internecie, nie ma sensu, żebym się rozpisywał skoro to jest podstawa podstaw i jest tysiące artykułów na ten temat)
  2. this, oznacza, że odwołujesz się do obecnej klasy. W twoim przypadku może i nie ma różnicy ale co jeśli chcesz zrobić coś takiego:
public class Person {
	private String name;

	public Person(String name) {
		//i co teraz? jak przypisać name do name?
		name = name; //ten kod tak naprawdę nie robi nic.
		this.name = name; //to jedyne wyjście. this wskazuje, że chodzi Ci o pole klasy. W ten sposób najczęściej używa się this.
	}
	
	public void someMethod() {
		name = "Jacek";
		this.name = "Jacek";
		//nie ma znaczenia jak napiszesz. Program zadziała tak samo.
	}
}
1

Matko święta wyszukiwarka się popsuła?
A tak na poważnie:
Java - this - używać czy nie?

Swoja drogą: jak już musisz to nie "Privet" tylko "priviet" (nauczanie rosyjskiego w Polsce zakończono na roczniku '85 - mało kto rozumie takie kalki językowe)

0

@Berylo pokazał jak za pomocą przedrostka this. dostać się do przesłoniętych zmiennych. Takie przesłanianie zwyczajowo następuje w konstruktorze (co też @Berylo przestawił) oraz w setterach i to właśnie w tych miejscach ląduje większość wystąpień słówka kluczowego this.

Kombinowanie z:

name = jestemKoślawyName;
age = jestemKoślawyAge;

jest nie-Javowe. Javowy idiom to:

this.name = name;
this.age = age;

W Javie pisz po Javowemu :) Inaczej koledzy z OCD zaczną się złościć.

0
Berylo napisał(a):
  1. konstruktorów używa się aby utworzyć obiekt (poczytaj o tym w internecie, nie ma sensu, żebym się rozpisywał skoro to jest podstawa podstaw i jest tysiące artykułów na ten temat)
  2. this, oznacza, że odwołujesz się do obecnej klasy. W twoim przypadku może i nie ma różnicy ale co jeśli chcesz zrobić coś takiego:
public class Person {
	private String name;

	public Person(String name) {
		//i co teraz? jak przypisać name do name?
		name = name; //ten kod tak naprawdę nie robi nic.
		this.name = name; //to jedyne wyjście. this wskazuje, że chodzi Ci o pole klasy. W ten sposób najczęściej używa się this.
	}
	
	public void someMethod() {
		name = "Jacek";
		this.name = "Jacek";
		//nie ma znaczenia jak napiszesz. Program zadziała tak samo.
	}
}

Raczej this to odwołanie do obiektu, który będzie utworzony na podstawie klasy, którą definiujesz. W większości przypadków nie potrzebujesz jawnego this, a tworzenie konstruktorów wg powyższego schematu to dobrze widziana konwencja niż wymóg języka. Bez this nie dasz rady zrobić jednego: zdefiniować metody zwracającej obiekt, która ją wywołała np.:

public class Person {
	private String name;

	public Person(String name) {
		//i co teraz? jak przypisać name do name?
		name = name; //ten kod tak naprawdę nie robi nic.
		this.name = name; //to jedyne wyjście. this wskazuje, że chodzi Ci o pole klasy. W ten sposób najczęściej używa się this.
	}
	
	public Person someMethod() {
		name = "Jacek";
		return this;
 	}
	
	public String getName(){
		return name;
	}
 }

wtedy możesz zrobić tak:

Person me = new Person("JA");
System.out.println(me.someMethod().getName());

1 użytkowników online, w tym zalogowanych: 0, gości: 1