– Chciałbym opowiedzieć Ci o inicjalizacji obiektów. Kiedy tworzysz jakiś obiekt, musisz przypisać wartości początkowe do jego zmiennych, aby uniknąć tego, że udostępnisz obiekt, któremu brakuje informacji potrzebnych do prawidłowego działania.

– Weźmy na przykład obiekt Plik. Minimalną wymaganą informacją dla pliku jest jego nazwa. Byłoby absurdalne tworzyć plik bez nazwy.

– Załóżmy, że piszemy klasę MojPlik, aby pracować z plikami. Jaka informacja jest niezbędna dla każdego obiektu?

– Nazwa pliku związana z obiektem?

– Tak jest. Aby to zrobić, dodajemy metodę inicjalizuj() do naszej klasy. Wygląda to tak.

Przykład:
class MojPlik
{
    private String nazwapliku = null;

    public void inicjalizuj(String nazwa)
    {
        this.nazwapliku = nazwa;
    }
...
}

– Dodajemy metodę inicjalizuj, aby móc pracować z obiektem za pomocą wywołania metody. Możemy wywołać metody obiektów zaraz po wywołaniu metody inicjalizuj. Jeśli nie można pracować z obiektem, nazywamy go nieprawidłowym; w innym przypadku jest on prawidłowy. Głównym zadaniem metody inicjalizuj jest otrzymanie wszystkich danych, które są wymagane, by obiekt był prawidłowy.

– Rozumiem.

– A teraz utrudnijmy sobie trochę to zadanie. A może, właściwie, uprośćmy? Zależy, jak na to spojrzeć. Załóżmy, że programista używający naszej klasy uzna, że wygodniej jest przekazać katalog pliku i skróconą nazwę zamiast jego pełnej ścieżki. Aby mógł on to zrobić, utworzymy kolejną metodę inicjalizuj (Java pozwala tworzyć wiele metod z identycznymi nazwami). A oto, jak wyglądałaby nasza klasa:

Przykład z dwiema metodami inicjalizuj:
class MojPlik
{
    private String nazwapliku = null;
    public void inicjalizuj(String nazwa)
    {
        this.nazwapliku = nazwa;
    }

    public void inicjalizuj(String folder, String nazwa)
    {
        this.nazwapliku = folder + nazwa;
    }

...
}

– Jeszcze jedno: często jest tak, że potrzebujemy zrobić tymczasową kopię pliku obok pliku bieżącego.

– Czy możemy stworzyć metodę, która to zrobi?

– Jasne. Spójrz.

Utwórz kopię obok bieżącego pliku.
class MojPlik
{
    private String nazwapliku = null;
    public void inicjalizuj(String nazwa)
    {
        this.nazwapliku = nazwa;
    }

    public void inicjalizuj(String folder, String nazwa)
    {
        this.nazwapliku = folder + nazwa;
    }

   // nazwapliku będzie przechowywany w tym samym katalogu, co plik. 
    public void inicjalizuj(MojPlik plik, String nazwa) 
    {       
        this.nazwapliku = plik.getFolder() + nazwa;
    }

...
}

– I mogę stworzyć tyle tych metod, ile chcę?

– W granicach rozsądku. Ale, technicznie rzecz biorąc, możesz tak zrobić.

– Kiedy powinienem wywołać metodę inicjalizuj?

– Natychmiast po utworzeniu obiektu, aby był on prawidłowy.

Przykłady:
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\a.txt");

String tekst = plik.readTekst();
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\", "a.txt");

String tekst = plik.readTekst();
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\a.txt");

MojPlik plik2 = new MojPlik();
plik2.inicjalizuj("a.txt");

String tekst = plik2.readTekst();

– Czym jest metoda getFolder()?

– Właściwie nie pokazaliśmy tutaj kodu. Ona reprezentuje metodę, która zwraca string z nazwą folderu, w którym przechowywany jest nasz plik.