“我想告訴你關於對像初始化的事情。當你創建一個對象時,你需要為它的變量賦初值,以避免你訪問一個沒有正確工作所需信息的對象的情況。”

“讓我們考慮一個 File 對象。文件的最低必要信息是它的名稱。創建一個無名文件是荒謬的。

“假設我們編寫一個 MyFile 類來處理文件。每個對象需要哪些信息?”

“與對象關聯的文件名?”

“沒錯。為此,我們將initialize () 方法添加到我們的類中。這就是它的樣子。”

例子:
class MyFile
{
    private String filename = null;

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

“我們添加了initialize方法,以便通過調用該方法來處理對象。我們可以在調用 initialize 方法後立即調用對象的方法。如果我們不能處理一個對象,我們稱它為無效;否則,我們說對像是有效的。initialize 方法的主要任務是接收對象使其有效所需的所有數據。

“我懂了。”

“現在讓我們的任務變得更難。或者,再想想,更容易。取決於你如何看待它。假設使用我們類的程序員會發現只傳遞文件的目錄和短名稱而不是完整路徑更方便。我們可以創建另一個初始化方法(Java 允許我們創建多個具有相同名稱的方法)來讓程序員這樣做。下面是我們的類的外觀:”

具有兩個初始化方法的示例:
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;
    }

…
}

“還有一件事:我們經常需要在當前文件的旁邊創建一個文件的臨時副本。”

“我們可以創造一種方法來做到這一點嗎?”

“當然。看。”

在當前文件旁邊創建一個副本:
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;
    }

…
}

“我可以想做多少就做多少這些方法?”

“好吧,在合理範圍內。但從技術上講,是的,你想要多少就多少。”

“我什麼時候必須調用初始化方法?”

“在創建對像後立即使其有效。”

例子:
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();

“這個 getFolder() 方法是什麼?”

“我們實際上並沒有在這裡展示代碼。它代表一個方法,該方法返回一個字符串,其中包含存儲我們文件的文件夾的名稱。”