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.