Static, public ou privado?

To fazendo um programa pra estudar o padrão de projeto DAO…
nesse programa tem uma class CadastroClienteGraf que é a parte visual(swing e awt), ClienteDAO q tem métodos de conexão com o banco de dados e ClienteJavaBean que tem as minhas variáveis com os seus métodos get e set.

As variáveis dentro de ClienteJavaBean deixei todas privadas e os métodos get e set públicos
ClienteDAO só tem métodos e eles são públicos tb.
Na classe CadastroClienteGraf até o momento está com as variáveis privadas e os métodos públicos… no entanto apresenta alguns erros dizendo que os métodos e variáveis precisam ser static nessa class para ficar visível ao ClienteJavaBean
-> As variáveis e métodos da classe CadastroClienteGraf são JTextField, JComboBox e etc.

Devo deixá-las staticas?
É a melhor forma?
Quando devo deixar static, public ou privado?

private = vc só tem acesso dentro da mesma classe
public = vc tem acesso ao a qualquer lugar do sistema

static não tem nada haver com private e public , é quando o atributo(variavel) é da classe e não do objeto em si

exemplo

quando vc tem um metodo statico vc pode acessar pelo noma da classe Classe.metodoStatico…

Entendi! Mas uma dúvida ficou.
Antes eu tava criando uma estancia da class para invocar um metodo.
Por exemplo… CadastroClienteGraf cadCliGrf = new CadastroClienteGraf(); … cadCliGrf.getJTextFieldNome().getText();

Qual é a diferença de fazer isso… com chamar Classe.metodoStatico?

Tens prols e contras?
Tenho que ficar atento com alguma coisa pra fazer isso?

Não use static porque:

  1. Seu static teria que ser público, o que torna ele uma variável global. Elas tendem a tornar o programa instável, já que com o tempo vc esquece de onde são usadas.
  2. Não é uma solução encapsulada. A classe que controla o JTextField pode fazer verificações, coisas static não são verificadas;
  3. Variáveis static jamais são coletadas da memória, a menos que vc explicitamente set elas como null. Isso cria altas chances de memory leaks no seu programa;
  4. Variáveis static podem deixar uma implementação completamente hostil contra multi-threading. Nem com sincronização resolveria o problema.

Entendi! então acho q é melhor criar a instancia da class msm =]
vlw!

Sem ver exatamente o que você fez, é pouco provável que possamos ajudá-lo, mas, julgo que, pela mensagem, você está fazendo algo como:

Ao invés de obter a instância existente de CadastroClienteGraf.