/** Program demonstrujący działanie klasy GregorianCalendar import java.util.*; public class TestKalendarza // zbuduj d i zainicjalizuj z aktualną datą GregorianCalendar d = new GregorianCalendar(); int dzisiaj = d.get(calendar.day_of_month); int miesiac = d.get(calendar.month); // zmien d na początku miesiąca d.set(calendar.day_of_month, 1); int dzientygodnia = d.get(calendar.day_of_week); // drukuj nagłówek System.out.println("Ni Pn Wt Śr Cz Pt So"); // puste pola pierwszej linii zapełnij spacjami for (int i = Calendar.SUNDAY; i < dzientygodnia; i++ ) System.out.print(" "); do // drukuj dzień int dzien = d.get(calendar.day_of_month); if (dzien < 10) System.out.print(" "); System.out.print(dzien); // aktualny dzień zaznacz * if (dzien == dzisiaj) System.out.print("* "); else System.out.print(" "); // po każdej sobocie zacznij nową linię if (dzientygodnia == Calendar.SATURDAY) System.out.println(); // przesuń d na następny dzień d.add(calendar.day_of_month, 1); dzientygodnia = d.get(calendar.day_of_week); while (d.get(calendar.month) == miesiac); // pętla kończy się, gdy d staje się pierwszym dniem następnego miesiąca // jeśli trzeba, wydrukuj ostatnią linię if (dzientygodnia!= Calendar.SUNDAY) System.out.println(); 1
/** Parametry metod zasięg i działanie public class TestParam /* Test 1: Metody nie mogą zmieniać parametrów liczbowych System.out.println("Test potrojwartosc:"); double procent = 10; System.out.println("Przed: procent=" + procent); potrojwartosc(procent); System.out.println("Po: procent=" + procent); /* Test 2: Metody mogą zmieniać stan obiektów przekazywanych przez parametry System.out.println("\nTest potrojpensje:"); Pracownik henryk = new Pracownik("Henryk", 50000); System.out.println("Przed: pensja = " + henryk.pobierzpensje()); potrojpensje(henryk); System.out.println("Po: pensja = " + henryk.pobierzpensje()); /* Test 3: Metody nie mogą przyrównywać nowych obiektów do zmiennych, będących parametrami System.out.println("\nTest zamien:"); Pracownik a = new Pracownik("Alicja", 70000); Pracownik b = new Pracownik("Bartek", 60000); System.out.println("Przed: a = " + a.pobierznazw()); System.out.println("Przed: b = " + b.pobierznazw()); zamien(a, b); System.out.println("Po: a = " + a.pobierznazw()); System.out.println("Po: b = " + b.pobierznazw()); public static void potrojwartosc(double x) // nie działa x = 3 * x; System.out.println("Koniec metody: x = " + x); public static void potrojpensje(pracownik x) // działa x.podniespensje(200); System.out.println("Koniec metody: pensja = " + x.pobierzpensje()); public static void zamien(pracownik x, Pracownik y) Pracownik temp = x; x = y; y = temp; System.out.println("Koniec metody: x = " + x.pobierznazw()); System.out.println("Koniec metody: y = " + y.pobierznazw()); 2
class Pracownik // uproszczona klasa Pracownik public Pracownik(String n, double p) nazwisko = n; public String pobierznazw() public void podniespensje(double oprocent) double podwyzka = pensja * oprocent / 100; pensja += podwyzka; private String nazwisko; /** Używanie konstruktorów import java.util.*; public class TestKonstruktora // umieść w tablicy obsługi trzy obiekty typu Pracownik Pracownik[] obsluga = new Pracownik[3]; obsluga[0] = new Pracownik("Henryk", 40000); obsluga[1] = new Pracownik(60000); obsluga[2] = new Pracownik(); // wyświetl informacje o wszystkich obiektach typu Pracownik for (int i = 0; i < obsluga.length; i++) Pracownik p = obsluga[i]; System.out.println("nazwisko = " + p.pobierznazw() + ",id = " + p.pobierzid() + ",pensja = " + p.pobierzpensje()); 3
class Pracownik // trzy przeładowane konstruktory public Pracownik(String n, double p) nazwisko = n; public Pracownik(double p) // wywołuje konstruktor Pracownik(String, double) this("pracownik #" + nastepnyid, p); // konstruktor domyślny public Pracownik() // nazwisko zainicjalizowane jako "" -- definicja niżej // wartość zmiennej pensja nie określona -- zainicjalizowana jako 0 // id zainicjalizowany w bloku inicjalizacji public String pobierznazw() public int pobierzid() return id; // blok inicjalizacyjny obiektu id = nastepnyid; nastepnyid++; // statyczny blok inicjalizacyjny static Random generator = new Random(); // nadaj zmiennej nastepnyid losową wartość z przedziału 0 i 9999 nastepnyid = generator.nextint(10000); private String nazwisko = ""; // bezpośrednia inicjalizacja zmiennej składowej private int id; private static int nastepnyid; 4
/** Działanie pakietów importowanie import folder1.folder2.folder3.*; // w tym pakiecie jest zdefiniowana klasa Pracownik public class TestPakietu // ze względu na polecenie import nie musimy używać tutaj // nazwy com.horstmann.corejava.pracownik Pracownik henryk = new Pracownik("Henryk Haker", 50000, 1989, 10, 1); /** // podnieś pensję o 5% henryk.podniespensje(5); // wyświetl informacje o Henryku System.out.println("nazwisko = " + henryk.pobierznazw() + ",pensja = " + henryk.pobierzpensje()); definicja package folder1.folder2.folder3; // klasy zawarte w tym pliku są częścią tego pakietu import java.util.*; // polecenia import pojawiają się po poleceniu package public class Pracownik public Pracownik(String n, double p, int rok, int miesiac, int dzien) nazwisko = n; GregorianCalendar kalendarz = new GregorianCalendar(rok, miesiac - 1, dzien); // GregorianCalendar rozpoczyna liczenie miesięcy od zera dzienzatrudnienia = kalendarz.gettime(); public String pobierznazw() public Date pobierzdzienzatrudnienia() return dzienzatrudnienia; 5
public void podniespensje(double oprocent) double podwyzka = pensja * oprocent / 100; pensja += podwyzka; private String nazwisko; private Date dzienzatrudnienia; /** DZIEDZICZENIE rozszerzanie klas import java.util.*; public class TestMenadzera // utwórz obiekt menadżera Menadzer szef = new Menadzer("Karol Kraker", 80000, 1987, 12, 15); szef.zmienbonus(5000); Pracownik[] obsluga = new Pracownik[3]; // wypełnij tablicę obsługi obiektami Menadzer i Pracownik obsluga[0] = szef; obsluga[1] = new Pracownik("Henryk Haker", 50000, 1989, 10, 1); obsluga[2] = new Pracownik("Tomasz Tester", 40000, 1990, 3, 15); // wyświetl na ekranie informacje o wszystkich obiektach w tablicy for (int i = 0; i < obsluga.length; i++) Pracownik p = obsluga[i]; System.out.println("nazwisko = " + p.pobierznazw() + ",pensja = " + p.pobierzpensje()); class Pracownik public Pracownik(String n, double p, int rok, int miesiac, int dzien) nazwisko = n; GregorianCalendar kalendarz = new GregorianCalendar(rok, miesiac - 1, dzien); // GregorianCalendar rozpoczyna liczenie miesięcy od 0 dzienzatrudnienia = kalendarz.gettime(); 6
public String pobierznazw() public Date pobierzdzienzatrudnienia() return dzienzatrudnienia; public void podniespensje(double oprocent) double podwyzka = pensja * oprocent / 100; pensja += podwyzka; private String nazwisko; private Date dzienzatrudnienia; class Menadzer extends Pracownik /** opis parametrów klasy @param n nazwisko pracownika @param p pensja @param rok rok zatrudnienia @param miesiac miesiąc zatrudnienia @param dzien dzień zatrudnienia public Menadzer(String n, double p, int rok, int miesiac, int dzien) super(n, p, rok, miesiac, dzien); bonus = 0; double pensjapodstawowa = super.pobierzpensje(); return pensjapodstawowa + bonus; public void zmienbonus(double b) bonus = b; private double bonus; 7
/** DZIEDZICZENIE zapobieganie dziedziczeniu, rzutowanie i klasy abstrakcyjne import java.text.*; public class TestOsoby Osoba[] osoby = new Osoba[2]; // wypełń tablicę osób obiektami typów Student i Pracownik osoby[0] = new Pracownik("Henryk Haker", 50000); osoby[1] = new Student("Maria Morris", "informatyki"); // wydrukuj nazwiska i opisy wszystkich osób w tablicy for (int i = 0; i < osoby.length; i++) Osoba o = osoby[i]; System.out.println(o.pobierzNazw() + ", " + o.pobierzopis()); abstract class Osoba public Osoba(String n) nazwisko = n; public abstract String pobierzopis(); public String pobierznazw() private String nazwisko; 8
class Pracownik extends Osoba public Pracownik(String n, double p) // przekaż n do konstruktora nadklasy super(n); public String pobierzopis() NumberFormat formator = NumberFormat.getCurrencyInstance(); return "pracownik o pensji " + formator.format(pensja); public void podniespensje(double oprocent) double podwyzka = pensja * oprocent / 100; pensja += podwyzka; class Student extends Osoba /** @param n nazwisko studenta @param d kierunek studiów w dopełniaczu public Student(String n, String d) // przekaż n do konstruktora nadklasy super(n); dopelniacz = d; public String pobierzopis() return "student " + dopelniacz; private String dopelniacz; 9