"Tôi muốn nói với bạn về khởi tạo đối tượng. Khi bạn tạo một đối tượng, bạn cần gán các giá trị ban đầu cho các biến của nó để tránh trường hợp bạn truy cập vào một đối tượng không có thông tin cần thiết để nó hoạt động chính xác."

"Hãy xem xét một đối tượng Tệp. Thông tin cần thiết tối thiểu cho một tệp là tên của nó. Sẽ thật vô lý nếu tạo một tệp không tên. "

"Giả sử chúng ta viết một lớp MyFile để làm việc với các tệp. Thông tin nào sẽ cần thiết cho mỗi đối tượng?"

"Tên của tệp được liên kết với đối tượng?"

"Đúng vậy. Để làm điều này, chúng ta thêm phương thức khởi tạo () vào lớp của mình. Nó trông như thế này."

Ví dụ:
class MyFile
{
    private String filename = null;

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

"Chúng tôi đã thêm phương thức khởi tạo để có thể làm việc với đối tượng bằng cách gọi phương thức. Chúng tôi có thể gọi phương thức của đối tượng ngay sau khi gọi phương thức khởi tạo . Nếu chúng tôi không thể làm việc với một đối tượng, chúng tôi gọi nó là không hợp lệ ; ngược lại, chúng tôi nói rằng đối tượng là hợp lệ Nhiệm vụ chính của phương thức khởi tạo là nhận tất cả dữ liệu mà một đối tượng yêu cầu để làm cho nó hợp lệ. "

"Tôi hiểu rồi."

"Bây giờ chúng ta hãy làm cho nhiệm vụ của chúng ta khó hơn. Hoặc, trong suy nghĩ thứ hai, dễ dàng hơn. Tùy thuộc vào cách bạn nhìn nhận nó. Giả sử một lập trình viên sử dụng lớp của chúng ta sẽ thấy thuận tiện hơn khi chỉ chuyển thư mục của tệp và tên viết tắt thay vì đường dẫn đầy đủ của nó. Chúng ta có thể tạo một phương thức khởi tạo khác ( Java cho phép chúng ta tạo một số phương thức có tên giống hệt nhau ) để lập trình viên thực hiện việc này. Lớp của chúng ta sẽ trông như thế này:"

Ví dụ với hai phương thức khởi tạo :
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;
    }

…
}

"Một điều nữa: chúng ta thường cần tạo một bản sao tạm thời của tệp bên cạnh tệp hiện tại."

"Chúng ta có thể tạo ra một phương pháp để làm điều này?"

"Chắc chắn rồi. Nhìn đi."

Tạo một bản sao bên cạnh tệp hiện tại:
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;
    }

…
}

"Và tôi có thể thực hiện bao nhiêu phương pháp này tùy thích?"

"Chà, trong chừng mực hợp lý. Nhưng về mặt kỹ thuật, vâng, bao nhiêu tùy thích."

"Khi nào tôi phải gọi phương thức khởi tạo?"

"Ngay sau khi tạo đối tượng, để làm cho nó hợp lệ."

Ví dụ:
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();

"Phương thức getFolder() này là gì?"

"Chúng tôi chưa thực sự hiển thị mã ở đây. Nó đại diện cho một phương thức trả về một chuỗi có tên của thư mục nơi tệp của chúng tôi được lưu trữ."