Wątek przeniesiony 2015-10-06 22:54 z Java przez bogdans.

Co ja inicjuje??

0

Gdy napiszę:coś takiego:

Date h = harry.getHireDay();

co ja w takim przypadku tworzę obiekt, tylko zmienna albo co???

W książce którą czytam nie znalazłem do tej pory wyjaśnienia.
Wiem że obiekt tworzy sie za pomoca konstruktora danej klasy z wywołaniem new i wartość referencji która powstała przypisujemy do zmiennej obiektowej. W takim przypadku jak powyżej co ja utworzyłem??

0

Utworzyłeś referencje h do obiektu typu Date. Czy utworzyłes sam obiekt trudno powiedzieć bo nie wiemy co robi metoda getHireDay(). Przypuszczam że w klasie harry obiekt już istniał więc ty tylko zwróciłeś referencje/adres do niego.

0

harry to nie klasa tylko referencja/obiekt.
Trudno mi to sobie wobrazić. Może jakiś Wasz prosty przykład pokazujący tą sprawę.

15

http://memy.pl/q/3DoL62DpZ xD (sorki, nie mogłem się powstrzymać).

user image

0

Tylko sie naśmiewacie zamiast poważnie odpowiedzieć. Uważałem że to forum jest poważne.

Myślałem nad tym i wydaje mi sie że utworzyłem referencje h do obiektu typu Date a metoda getHireDay() "wyciąga" z obiektu harry klasy Employee obiekt hireDay klasy Date (czyli obiekt z obiektu). Tak jak pokazuje to poniższa ilustracja:
s.png
Teraz tylko proszę o potwierdzenie czy dobrze rozumiem??

0
public Date getHireDay()
{
return hireDay;
}

Taki jest powyższy kod metody. Zgodnie z postem wcześniejszym proszę tylko o potwierdzenie czy dobrze zrozumiałem. Wydaje mi sie że tak ale wolę Was zapytać.

0

Wyobraz sobie ze masz duza szafe z numerowanymi pulkami. Jezeli piszesz new to wkladasz obiekt do szuflady, patrzysz na numer szuflady i go sobie zapisujesz. Potem ktos chce od Ciebie numer szulfady z tym obiektem wiec dajesz mu kartke i mowisz zeby sobie przepisal. I teraz zarowno Ty jak i on wiecie gdzie ten obiekt jest. Sytuacja ta jest rownowazna z Obiekt o = new Obiekt() => wlozenie do szuflady.
Obiekt o2 = o; // przepisanie numeru

0

Ja tylko chciałem dostać potwierdzenie czy dobrze zrozumiałem. Jeśli dobrze wystarczy napisać: Tak dobrze zrozumiałeś. Tylko tyle chce.

0

Hehe terminilogia języka jest czasem bardziej zagmatwana niż jego składnia, nie dziwie się koledze, bo 7-8 lat temu jak zaczynałem przygodę, to też nic z tego nie rozumiałem.
Później sobie to tłumaczyłem w taki sposób

Referencja - to niewdzialna ręka która odnosi się do czegoś i może trzymać to w garści

Podobały mi się analogie książkowe np jak uczyłem się metod wirtualnych i ogólnie klas to szło to mniej więcej tak.
Klasa to zbiór uczniów na lekcji
Na lekcji są dzieci
dzieci są obiektami ->
a obiekty mają właściwości
jeden obiekt(dziecko) a właściwością dziecka jest jego parametr techniczny, jedno może być wyższe a drugie niższe

A np wyrażenia warunkowe
Słoń > mrówka - Słoń jest większy od mrówki
if(Słoń > mrówka){
Mrówka nie może być większa od słońa
}
else
{
A jak chce żeby była to musze wstawić ją tutaj na tym wzniesieniu o nazwie Else
}

Troche to z dziesiejszej perspektywy zabawne no ale tak się było łatwiej uczyć, ale taka metoda była najlepiej przyswajalna.

Generalnie połowa sukcesu leży w szukaniu kursów które są pisane przez ludzi którzy mają wyobraźnie i potrafią ładnie ubrać to w metafory, bo takim sztywnym językiem technicznym to naprawdę czasami ciężko dla początkującego jest to ogarnąć. Niekiedy jak przyjdzie czytać ciężkie dokumentacje to ze słownikiem języka polskiego i wyrazów obcych trzeba siedzieć bo niektórzy jak ścisną zwieracze i zaczną bawić się w internetowych korepetytorów kursów online to nie ma zmiłuj klasa musi być ;x Hybrydy ewoluowały Humanisto-Programistus tragiczna krzyżówka

0
import java.util.*;

public class EmployeeTest
{
public static void main(String[] args)
{
// Wstawienie trzech obiektów pracowników do tablicy staff.
Employee[] staff = new Employee[3];
staff[0] = new Employee("Jarosław Rybiński", 75000, 1987, 12, 15);
staff[1] = new Employee("Katarzyna Remiszewska ", 50000, 1989, 10, 1);
staff[2] = new Employee("Krystyna Kuczyńska ", 40000, 1990, 3, 15);
// Zwiększenie pensji wszystkich pracowników o 5%.
for (Employee e : staff)
e.raiseSalary(5);
// Drukowanie informacji o wszystkich obiektach klasy Employee.
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" + e.getHireDay());
}
}
class Employee
{
private String name;
private double salary;
private Date hireDay;
public Employee(String n, double s, int year, int month, int day)

{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
// W klasie GregorianCalendar styczeń ma numer 0.
hireDay = calendar.getTime();
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public Date getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}
}

Podałem kod programu. i zapytam o jedną rzecz.
Pytanie główne:
W klasie Employee w bloku konstruktora tworzymy obiekt i przypisujemy
referencje tego obiektu do lokalnej zmiennej obiektowej calender.
Potem operujemy na tym obiekcie (poprzez jego referencje czyli zmienna calender)
aby uzyskać wartość/referencje dla zmiennej hireDay która jest globalną zmienną
referencyjną klasy Date inaczej polem klasy. Kiedys na forum tłumaczyliście mi że
zmienne lokalne przestaja istnieć po wykonaniu metody, w takim wypadku zapytam
co z obiektem który stworzyliśmy w bloku tej metody(konstruktora) czy on istnieje
dalej czy znika równo ze zmienną lokalną???

Poniżej napisze swoje przemyślenia na ten temat.
Skoro utworzyliśmy obiekt: new GregorianCalendar(...) w metodzie,
i wykonaliśmy na nim operacje - getTime() mającą na celu przypisanie zmiennej
hireDay referencji do obiektu oznaczajacego datę, którego to znowu referencja
znajduje sie w obiekcie new GregorianCalendar(...) to wydaje mi się że po wykonaniu
danej metody (u nas knstruktora) lokalna zmienna referencyjna przestaje istnieś ale
obiekt stworzony w tej metodzie musi dalej istnieć bo przecież globalna zmienna obiektowa
hireDay posiada cały czas referencje do obiektu daty.

Ja tak to sobie wyobrażam i chyba to tak musi byc bo gdyby obiekt też znikał po wykonaniu
metody wtedy globalna zmienna hireday nie miała by soe do czego odwoływać.

Proszę Was o potwierdzenie moich przemyśleń.

===============================================================================================

Pytanie dodatkowe.
Tworząc obiekt danej klasy może ten obiekt zawierać referencje do jakiegoś innego obiektu
a ten inny obiekt znowu może posiadać referencje jeszcze do innego obiektu itd.

Dobrze myślę??

Proszę Was dla każdego pytania o osobną odpowiedź i mam nadzieje że obie będą brzmieć: TAK, dobrze rozumiesz.

0

Dziękuje bardzo. O takie słowa mi chodziło. Ale powiem bałem sie trochę że znowu źle rozumiem. Pozdro

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