「オブジェクトの初期化についてお話したいと思います。オブジェクトを作成するときは、正しく動作するために必要な情報を持たないオブジェクトにアクセスするという状況を避けるために、その変数に初期値を割り当てる必要があります。」

"File オブジェクトを考えてみましょう。ファイルに最低限必要な情報はその名前です。名前のないファイルを作成するのはばかげています。 "

「ファイルを操作するための MyFile クラスを作成するとします。各オブジェクトにはどのような情報が必要になるでしょうか?」

「オブジェクトに関連付けられたファイルの名前は?」

「そうです。これを行うには、initialize () メソッドをクラスに追加します。これがどのように見えるかです。」

例:
class MyFile
{
    private String filename = null;

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

「初期化メソッドを追加して、メソッドを呼び出すことでオブジェクトを操作できるようにしました。初期化メソッドを呼び出した直後にオブジェクトのメソッドを呼び出すことができます。オブジェクトを操作できない場合は、そのオブジェクトを無効と呼びますそうでない場合は、オブジェクトは有効であると言います。初期化メソッドの主なタスクは、オブジェクトを有効にするために必要なすべてのデータを受け取ることです。

"そうか。"

「さあ、タスクを難しくしましょう。あるいは、よく考えれば簡単です。見方によって異なります。このクラスを使用するプログラマが、ファイルのフル パスの代わりに、ファイルのディレクトリと短い名前だけを渡す方が便利だと考えたとします。別の初期化メソッドを作成して( Java では同じ名前のメソッドをいくつか作成できます)、プログラマにこれを行わせることができます。クラスは次のようになります。

2 つの初期化メソッドを使用した例:
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;
    }

…
}

「もう 1 つ: 現在のファイルの隣にファイルの一時コピーを作成する必要があることがよくあります。」

「これを行うためのメソッドを作成できますか?」

「そうですね。見てください。」

現在のファイルの隣にコピーを作成します。
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() メソッドは何ですか?」

「ここでは実際にはコードを示していません。これは、ファイルが保存されているフォルダーの名前を含む文字列を返すメソッドを表しています。」