[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
RE: essa tal de static reference...
- Subject: RE: essa tal de static reference...
- From: Francisco Reverbel <reverbel at ime.usp.br>
- Date: Sun, 25 Apr 1999 19:32:41 -0300
Daniel Cukier writes:
> Porque o meu ep dá varios erros com a mensagem:
>
> cant make a static reference to a nonstatic (method ou variable) in
> class...
Porque metodos de classe (static) só podem referenciar campos que forem
de classe (static) ou campos de instância (não static) de objetos
particulares.
> eu tentei solucionar esses erros colocando static em tudo quanto é
> lugar, mas sei que isso nao é o mais correto.
Não faça isso! O static significa que o método ou o campo não é de um
objeto particular, mas da classe toda. Um campos que forem de um objeto
particular -- o fileName de um DBFile, por exemplo -- não pode ter
static. Senão você vai guardar um fileName só para todos os DBFiles, o
que está completamente errado!
> Qual seria a solucao então?
>
> Um exemplo real:
> o método create da classe DBFile é static
>
> dentro desse método, eu desejo inserir a linha
>
> DBFile.fileName = fileName;
> DBFile.numberOfBlock = nBlks;
> .
> .
> .
> isso está certo??
Não está. Tente algo como
DBFile dbf = new DBFile();
dbf.fileName = fileName;
dbf.numberOfBlock = nBlks;
Note que agora o método de classe não está referenciando DBFile.fileName
(que não faz sentido, pois não existe um fileName para a classe toda) e
sim o dbf.fileName (o campo fileName de um particular objeto).
Mudando um pouco de assunto: Em vez de chamar um construtor e logo em
seguida inicializar campos do objeto recém construido, é melhor colocar
a inicialização desses campos dentro do construtor. Em vez das tres
linhas acima, você teria uma linha só:
DBFile dbf = new DBFile(fileName, nBlks);
Reverbel