Java. konstruktory i słówko *this*

Odpowiedz Nowy wątek
2018-12-20 23:33
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);
    }
}

Pozostało 580 znaków

2018-12-20 23:47
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.
    }
    }

Pozostało 580 znaków

2018-12-20 23:51
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)


quidquid Latine dictum sit, altum videtur
edytowany 1x, ostatnio: maniutek20, 2018-12-20 23:52

Pozostało 580 znaków

2018-12-21 00:05
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ć.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 4x, ostatnio: Wibowit, 2018-12-21 00:13

Pozostało 580 znaków

2018-12-21 07:13
cs
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());
edytowany 1x, ostatnio: cs, 2018-12-21 07:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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