Palavra static

6 respostas
O

pq ta dando erro nesse codigo??

static class classe1 {
public static void classe1 () {

}
public static void funcao () {
    
}

}

quero dexa ela estatica para q seja vista sem precisar de uma instancia da mesma…

dessa forma:

classe1.funcao();

vlw …

6 Respostas

B

“ozzyjunior”:
pq ta dando erro nesse codigo??

static class classe1 {
public static void classe1 () {

}
public static void funcao () {
    
}

}

quero dexa ela estatica para q seja vista sem precisar de uma instancia da mesma…

dessa forma:

classe1.funcao();

vlw …

Só vc tirar o “static” da declaração da classe “classe1”

O

mas pq??..não pode faze isso???

B

Ola,

Bom, lá vai:

uma classe só pode ser estatica se for uma classe interna, pq a palavra estatica define recursos que pode ser usados SEM a isntancia da mesma, tipo, um metodo que só acesse coisas estaticas. Pq eu disse que só as classes internas podem ser estaticas? para que elas possam ser acessadas, se publicas, sem a necessidade da instancia da classe que à encapsula.

Pos isto classes comuns não podem ser estaticas, entendeu?

S

Não faz sentido uma classe externa ser static.
Se você quer acessar os métodos sem ter que criar uma instância dela, basta tornar os métodos desejados static.
E se você quer que a classe não seja “instanciável”, basta tornar o contrutor dela private.

O

hum…intendi…

e se eu usar “abstract class”? não eh a mesma coisa de usar private no construtor da classe para dexar ele não-instanciavel??..

J

Sobre o static, o modificador só pode ser aplicado a membros de classes, isso inclui: atributos, metodos e classes internas.

E se você tornar o construtor de uma classe private não quer dizer que ela não seja instanciavel, quer dizer que o construtor só pode ser usado dentro dela mesma, mas e se a classe auto-instanciar???! Isso é usado por exemplo no Design Pattern Singleton, ex.:

public class Singleton{
   private static Singleton instance = new Singleton();

   private Singleton(){
   }
   
   public static Singleton getInstance(){
      return instance;
   }
}

Colocar abstract impede que ela seja instanciada, nesse caso ela deve ser estendida para ser usada, aí nesse caso sua subclasse será instanciada!

Mas se uma classe não pode ser instanciada de jeito nenhum, nem diretamente, nem indiretamente, ela não precisa existir, é o caso de colocar um modificar abstract e um final na mesma classe, nem é possivel porque a classe não poderá ser instanciada nunca, o que a torna inutil!

Criado 7 de julho de 2006
Ultima resposta 7 de jul. de 2006
Respostas 6
Participantes 4