Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida para reforçar o conhecimento básico sobre static

No projeto, no modelo Banco, temos o seguinte trecho:

private static List<Empresa> empresas = new ArrayList<>();
    private static List<Usuario> listaUsuarios = new ArrayList<>();
    private static Integer chaveSequencial = 1;

    static {
        Empresa empresa = new Empresa();
        empresa.setId(Banco.chaveSequencial++);
        empresa.setNome("Alura");

        Empresa empresa2 = new Empresa();
        empresa2.setId(Banco.chaveSequencial++);
        empresa2.setNome("Caelum");

        empresas.add(empresa);
        empresas.add(empresa2);

        Usuario u1 = new Usuario();
        u1.setLogin("luci");
        u1.setSenha("12345");

        Usuario u2 = new Usuario();
        u2.setLogin("luci");
        u2.setSenha("12345");

        listaUsuarios.add(u1);
        listaUsuarios.add(u2);

    }

Podem, reforçar, o por quê do static

private static List<Usuario> listaUsuarios = new ArrayList<>();

Ao invés de

private List<Usuario> listaUsuarios = new ArrayList<>();

?

O que há por trás? O que a JVM entende quando fazemos isso? Usando como static?

O uso do static { variáveis iniciadas aqui dentro } compila? Eu digo pra jvm que quando rodar eu quero que já inicie com esses objetos instanciados, certo?

Obrigada!

2 respostas

Olá Antonia tudo bem?

Quando declaramos os atributos como estáticos estamos indicando que eles pertencem à classe . Com isso, todas as instancias do Banco acessam o mesmo conteúdo desses atributos, caso contrário, se não definirmos como estático, cada instância terá o seu próprio valor.

Veja que estamos instanciando o Banco em várias partes do código e cada uma dessas instâncias acessa sempre as mesmas listas de empresas e usuários.

solução!

Entendi, José. Muito obrigada!!