"Gostaria de falar sobre inicialização de objetos. Ao criar um objeto, você precisa atribuir valores iniciais às suas variáveis ​​para evitar a situação em que você acessa um objeto que não possui as informações necessárias para funcionar corretamente."

"Vamos considerar um objeto File. A informação mínima necessária para um arquivo é o seu nome. Seria um absurdo criar um arquivo sem nome. "

"Suponha que escrevemos uma classe MyFile para trabalhar com arquivos. Quais informações seriam necessárias para cada objeto?"

"O nome do arquivo associado ao objeto?"

"Isso mesmo. Para fazer isso, adicionamos o método initialize () à nossa classe. É assim que fica."

Exemplo:
class MyFile
{
    private String filename = null;

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

"Adicionamos o método initialize para possibilitar trabalhar com o objeto chamando o método. Podemos chamar os métodos do objeto imediatamente após chamar o método initialize . Se não pudermos trabalhar com um objeto, o chamamos de inválido ; caso contrário, dizemos que o objeto é válido . A tarefa principal do método initialize é receber todos os dados que um objeto requer para torná-lo válido .

"Eu vejo."

"Agora vamos tornar nossa tarefa mais difícil. Ou, pensando bem, mais fácil. Depende de como você olha para isso. Suponha que um programador usando nossa classe ache mais conveniente passar apenas o diretório do arquivo e o nome curto em vez de seu caminho completo. Poderíamos criar outro método de inicialização ( Java nos permite criar vários métodos com nomes idênticos ) para permitir que o programador faça isso. Veja como nossa classe ficaria:"

Exemplo com dois métodos de inicializaçã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;
    }}

"Mais uma coisa: muitas vezes precisamos criar uma cópia temporária de um arquivo ao lado do atual."

"Podemos criar um método para fazer isso?"

"Claro. Olhe."

Crie uma cópia ao lado do arquivo atual:
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 eu posso fazer quantos desses métodos eu quiser?"

"Bem, dentro do razoável. Mas tecnicamente falando, sim, quantos você quiser."

"Quando devo chamar o método initialize?"

"Imediatamente após a criação do objeto, para torná-lo válido."

Exemplos:
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();
2
Tarefa
Java Syntax,  nível 5lição 6
Bloqueado
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and earn a little dark matter. What's more, you combat laziness.

"O que é este método getFolder()?"

"Na verdade, não mostramos o código aqui. Ele representa um método que retorna uma string com o nome da pasta onde nosso arquivo está armazenado."