3
respostas

Classe banco

Bom dia,

Quando eu utlizo a classe banco desta forma:

package br.com.alura.gerenciador.servlet;

import java.util.ArrayList;
import java.util.List;

public class Banco {

    private List<Empresa> lista = new ArrayList<>();


    static {
        Empresa empresa = new Empresa();
        Empresa empresa2 = new Empresa();
        empresa.setNome("Alura");
        empresa2.setNome("Caelum");
        lista.add(empresa);
        lista.add(empresa2);
    }

    public List<Empresa> getEmpresas() {
        return lista;
    }

    public void adicionar(Empresa empresa) {
        lista.add(empresa);
    }

}

A empresa não é adicionada a lista. Só funciona quando utiliza-se o atributo estático. Alguém sabe explicar porque?

3 respostas

Bom dia, não entendi sua pergunta, você meio que fez a pergunta ja dando a resposta, tem que deixar o atributo estático mesmo pra funcionar!

Porque sem ser estático ele nao funciona? Não entendi muito bem. Pelo que entendo se eu adicionar a lista sem ele ser estático deveria funcionar.

Então cara… em Java, você pode ter 3 coisas “static”: blocos de inicialização, variáveis/métodos e classes internas.

Primeiro precisa entender o seguinte. Static é a mesma coisa que “de classe”, e não “de objeto”. Uma classe pode ter vários objetos. Por exemplo: Carro vectra = new Carro(); Carro palio = new Carro();

Aqui temos apenas uma classe: “Carro” Mas temos dois objetos: “vectra” e “palio”

Agora que já sabe a diferença entre classe e objeto, fica mais fácil. Static é “de classe”, ou seja, uma variável static da classe Carro teria o mesmo valor para qualquer objeto (vectra, palio, fusca, ferrari…). Tanto que você nem precisa criar objetos pra acessa-las. Ela é usada geralmente para contadores, ver quantos objetos foram criados a partir da classe, ou então para fazer variáveis globais (como vc deve fazer em Delphi).

Se você não coloca static nas variáveis, elas ficam com uma cópia diferente pra cada objeto (o que é o mais usual).

Blocos de inicialização são bloquinhos com coisas que você quer que executem quando a classe for carregada na virtual machine, o que acontece apenas uma vez (nunca precisei usar isso, é só pra saber que existe). Por exemplo:

static { System.out.println(“O classloader carregou essa classe!!”); }

E classes internas são classes dentro de classes, que também podem ser static (também nunca precisei usar isso, mas saiba que existe). Por exemplo:

class Externa {

static class interna {

}

}

Espero ter esclarecido cara… abração

fonte: https://www.guj.com.br/t/para-que-serve-a-palavra-static/42731/4