método estáticos em construtores

2 respostas
B

Ainda, outra dúvida, na pág. 203 existe um item que afirma algo que eu testei e que não funciona da maneira que o item apresentou, está escrito lá(ainda nas regras de construtores):
"Você pode acessar variáveis e métodos estáticos, porém só poderá usá-los como parte da chamada a super() ou this() (exemplo: super(Animal.DoThings()))."
Eu testei um construtor chamando um método estático e um não estático, sem o uso de super e this e funcionou perfeitamente…

Será que a afirmativa desse item quer dizer outra coisa?

2 Respostas

R

O que você fez foi chamar um método dentro do construtor, que é coisa bem diferente! :wink:

O que ela quer dizer é que você só pode usar membros estáticos como argumento das chamadas a construtores this() e super(). Isto acontece porque neste momento os membros não estáticos ainda não estão disponíveis porque o objeto ainda não foi criado.

Veja o exemplo:

public class Main {
  public static void main(String[] args) {
    Teste m = new Teste();
    m.imprime();
  }
}
class Teste {
  int x;
  public Teste(int x) {
    this.x = x;
  }  
  public Teste() {
    this(geraInteiro());
  }
  public static int geraInteiro() {
    return (int) (Math.random() * 100);
  }
  public void imprime() {
    System.out.print(x);
  }
}

Se o método geraInteiro() não fosse estático daria erro de compilação.

B

valeu Robson, entendi.

Criado 19 de maio de 2005
Ultima resposta 23 de mai. de 2005
Respostas 2
Participantes 2