"Me gustaría informarle sobre la inicialización de objetos. Cuando crea un objeto, debe asignar valores iniciales a sus variables para evitar la situación en la que accede a un objeto que no tiene la información que necesita para funcionar correctamente".

“Consideremos un objeto Archivo. La información mínima necesaria para un archivo es su nombre. Sería absurdo crear un archivo sin nombre ” .

"Supongamos que escribimos una clase MyFile para trabajar con archivos. ¿Qué información sería necesaria para cada objeto?"

"¿El nombre del archivo asociado con el objeto?"

"Así es. Para hacer esto, agregamos el método initialize () a nuestra clase. Así es como se ve".

Ejemplo:
class MyFile
{
    private String filename = null;

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

"Agregamos el método de inicialización para que sea posible trabajar con el objeto llamando al método. Podemos llamar a los métodos del objeto inmediatamente después de llamar al método de inicialización . Si no podemos trabajar con un objeto, lo llamamos inválido ; de lo contrario, decimos que el objeto es válido . La tarea principal del método initialize es recibir todos los datos que un objeto requiere para que sea válido " .

"Veo."

"Ahora hagamos nuestra tarea más difícil. O, pensándolo bien, más fácil. Depende de cómo lo mires. Supongamos que a un programador que usa nuestra clase le resultaría más conveniente pasar solo el directorio del archivo y el nombre corto en lugar de su ruta completa. Podríamos crear otro método de inicialización ( Java nos permite crear varios métodos con nombres idénticos ) para permitir que el programador haga esto. Así es como se vería nuestra clase:"

Ejemplo con dos métodos de inicialización :
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;
    }}

"Una cosa más: a menudo necesitamos crear una copia temporal de un archivo al lado del actual".

"¿Podemos crear un método para hacer esto?"

"Claro. Mira".

Cree una copia al lado del archivo actual:
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;
    }}

"¿Y puedo hacer tantos de estos métodos como quiera?"

"Bueno, dentro de lo razonable. Pero técnicamente hablando, sí, tantos como quieras".

"¿Cuándo tengo que llamar al método de inicialización?"

"Inmediatamente después de crear el objeto, para que sea válido".

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

"¿Qué es este método getFolder()?"

"En realidad no hemos mostrado el código aquí. Representa un método que devuelve una cadena con el nombre de la carpeta donde está almacenado nuestro archivo".