Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida EmpresaDAO e UsuarioDAO

Olá pessoal,

Estava sendo curioso e analisando as classes EmpresaDAO e UsuarioDAO e fiquei na dúvida do trecho de código abaixo:

//Trecho da classe EmpresaDAO
static {
        geraIdEAdiciona(new Empresa("Doceria Bela Vista"));
        geraIdEAdiciona(new Empresa("Ferragens Docel"));
        geraIdEAdiciona(new Empresa("Alura"));
        geraIdEAdiciona(new Empresa("Google"));
        geraIdEAdiciona(new Empresa("Caelum"));
        geraIdEAdiciona(new Empresa("Casa do Código"));
    }

//Trecho da classe UsuarioDAO
static {
        USUARIOS.put("guilherme.silveira@alura.com.br", new Usuario("guilherme.silveira@alura.com.br","silveira"));
        USUARIOS.put("rodrigo.turini@alura.com.br", new Usuario("rodrigo.turini@alura.com.br","turini"));
    }

O que seria esse trecho de código? Uma variável? Um construtor? Quando ele é chamado? Existe alguma documentação para que eu possa entender melhor como isso funciona?

Abaixo as classes citadas na minha dúvida:

public class EmpresaDAO {

    private final static Map<Long, Empresa> EMPRESAS = new HashMap<>();
    static {
        geraIdEAdiciona(new Empresa("Doceria Bela Vista"));
        geraIdEAdiciona(new Empresa("Ferragens Docel"));
        geraIdEAdiciona(new Empresa("Alura"));
        geraIdEAdiciona(new Empresa("Google"));
        geraIdEAdiciona(new Empresa("Caelum"));
        geraIdEAdiciona(new Empresa("Casa do Código"));
    }

    public Collection<Empresa> buscaPorSimilaridade(String nome) {
        if (nome == null)
            return EMPRESAS.values();

        List<Empresa> similares = new ArrayList<>();
        for (Empresa empresa : EMPRESAS.values()) {
            if (empresa.getNome().toLowerCase().contains(nome.toLowerCase()))
                similares.add(empresa);
        }
        return similares;
    }

    public void adiciona(Empresa empresa) {
        geraIdEAdiciona(empresa);
    }

    private static void geraIdEAdiciona(Empresa empresa) {
        long id = EMPRESAS.size()+1l;
        empresa.setId(id);
        EMPRESAS.put(id, empresa);
    }
}
public class UsuarioDAO {

    private final static Map<String, Usuario> USUARIOS = new HashMap<>();
    static {
        USUARIOS.put("guilherme.silveira@alura.com.br", new Usuario("guilherme.silveira@alura.com.br","silveira"));
        USUARIOS.put("rodrigo.turini@alura.com.br", new Usuario("rodrigo.turini@alura.com.br","turini"));
    }

    public Usuario buscaPorEmailESenha(String email, String senha) {
        if (!USUARIOS.containsKey(email))
            return null;

        Usuario usuario = USUARIOS.get(email);
        if (usuario.getSenha().equals(senha))
            return usuario;

        return null;
    }

}
1 resposta
solução!

O bloco de código com o modificador estático significa um inicializador de classe ; Sem o modificador estático, o bloco de código é um inicializador de instância .

Normalmente inicializadores estáticos executando antes da execução da instância da classe, pois os inicializadores de classe são executados na ordem em que são definidos.

Exemplo:

public class SucoDeFruta {

    static {
        System.out.println("Oi eu sou o Cris.");

        // todo mundo odeia - array
        ArrayList<String> tdoMundo = new ArrayList<>();
        tdoMundo .add("Rochele");
        tdoMundo .add("Cris");
        tdoMundo .add("PersiJackison");

        // Nao vou dizer nada
        for (String  eu: tdoMundo ) {
            System.out.println(eu);
        }
        System.out.println("Consigo ler nada\n");
    }

    public static void main(String[] args) {
        System.out.println("Pica pau.");
    }
}


-- Saida 
Iniciador estático interno.

Rochele

Cris

PersiJackison

Consigo ler nada

Pica pau