"Vorrei parlarti dell'inizializzazione degli oggetti. Quando crei un oggetto, devi assegnare valori iniziali alle sue variabili per evitare la situazione in cui accedi a un oggetto che non ha le informazioni di cui ha bisogno per funzionare correttamente."

"Consideriamo un oggetto File. L'informazione minima necessaria per un file è il suo nome. Sarebbe assurdo creare un file senza nome. "

"Supponiamo di scrivere una classe MyFile per lavorare con i file. Quali informazioni sarebbero necessarie per ogni oggetto?"

"Il nome del file associato all'oggetto?"

"Esatto. Per fare ciò, aggiungiamo il metodo initialize () alla nostra classe. Ecco come appare."

Esempio:
class MyFile
{
    private String filename = null;

    public void initialize(String name)
    {
        this.filename = name;
    }
…
}

"Abbiamo aggiunto il metodo initialize per rendere possibile lavorare con l'oggetto chiamando il metodo. Possiamo chiamare i metodi dell'oggetto immediatamente dopo aver chiamato il metodo initialize. Se non possiamo lavorare con un oggetto, lo chiamiamo invalid ; altrimenti, diciamo che l'oggetto è valido Il compito principale del metodo initialize è ricevere tutti i dati che un oggetto richiede per renderlo valido .

"Vedo."

"Ora rendiamo il nostro compito più difficile. O, ripensandoci, più facile. Dipende da come lo guardi. Supponiamo che un programmatore che usa la nostra classe trovi più conveniente passare solo la directory del file e il nome breve invece del suo percorso completo. Potremmo creare un altro metodo initialize ( Java ci consente di creare diversi metodi con nomi identici ) per consentire al programmatore di farlo. Ecco come dovrebbe apparire la nostra classe:"

Esempio con due metodi di inizializzazione :
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

…
}

"Ancora una cosa: spesso abbiamo bisogno di creare una copia temporanea di un file accanto a quella attuale."

"Possiamo creare un metodo per farlo?"

"Certo. Guarda."

Crea una copia accanto al file corrente:
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

   // The filename will be stored in the same directory as file. 
    public void initialize(MyFile file, String name) 
    {       
        this.filename = file.getFolder() + name;
    }

…
}

"E posso fare tutti questi metodi che voglio?"

"Beh, entro limiti ragionevoli. Ma tecnicamente parlando, sì, quante ne vuoi."

"Quando devo chiamare il metodo initialize?"

"Subito dopo aver creato l'oggetto, per renderlo valido."

Esempi:
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\", "a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

MyFile file2 = new MyFile();
file2.initialize("a.txt");

String text = file2.readText();

"Cos'è questo metodo getFolder()?"

"In realtà non abbiamo mostrato il codice qui. Rappresenta un metodo che restituisce una stringa con il nome della cartella in cui è memorizzato il nostro file."