Bom, comecei a aprender agora sobre arrayList e to com uma duvida: utilizando ArrayList, eu posso adicionar um outro elemento utilizando ArrayList.add, ta beleza. mas sempre antes de adicionar um elemento eu preciso dar um new() e informar todos os atributos? segue meu codigo de exemplo:
public class Cliente {
    String nome;
    String cpf;
    Endereco endereco;
    Data dataDeCadastro;
    public void imprimeCliente() {
        System.out.println("Nome: " + nome);
        System.out.println("CPF: " + cpf);
        System.out.println("Endereco: " + endereco.imprimeEndereco());
        System.out.println("Data de cadastro: " + dataDeCadastro.imprimeData());
        System.out.println("");
    }
}
package cadastroCliente;
public class Endereco {
    String rua;
    int numero;
    String bairro;
    String cidade;
    String estado;
    public String imprimeEndereco() {
        return this.rua + ", " + this.numero + "\n" + this.bairro + "\n" + this.cidade + " - " + this.estado;
    }
}
package cadastroCliente;
public class Data {
    int dia;
    int mes;
    int ano;
    public void formataData(int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
    public String imprimeData() {
        return dia + "/" + mes + "/" + ano;
    }
}
package cadastroCliente;
import java.util.ArrayList;
public class TesteCliente {
    public static void main(String[] args) {
        Cliente cliente1 = new Cliente();
        cliente1.nome = "Joao da Silva";
        cliente1.cpf = "125.475.859-63";
        cliente1.endereco = new Endereco();
        cliente1.endereco.rua = "Jorge Lobato";
        cliente1.endereco.numero = 745;
        cliente1.endereco.bairro = "Vila Tiberio";
        cliente1.endereco.cidade = "Ribeirao Preto";
        cliente1.endereco.estado = "SP";
        cliente1.dataDeCadastro = new Data();
        cliente1.dataDeCadastro.formataData(22, 03, 2016);
        ArrayList<Cliente> clientes = new ArrayList<>();
        clientes.add(cliente1);
        cliente1.imprimeCliente();
    }
} 
             
            