Estava no java ranzh e fiquei com a seguinte dúvida…
are static methods allowed to access instance variables using this.var?
answer: no
within a static method. there is no ‘this’! since this refers to the current object – the object whose method is executing – ‘this’ makes no sense in a static method, since it doesn’t belong to any abject.
Não, pois o this se refere a instancia corrente, já o static não tem relação com nenhuma instância!
lipe82
poderia explicar com um código, por favor. Talvez eu não tenha entendido o que ele quis dizer na pergunta…
sethbra
lipe82
O que está querendo ser dito é que os métodos estáticos não podem acessar as variáveis de instância.
Os métodos estáticos só podem acessar as variáveis e métodos estáticos
e como this sempre se refere a uma instância (a instância corrente), logo os métodos static não poderão ter acesso
a atributos ou métodos que utilizem [i]this[/i]
O texto diz isto aqui … tenta este código aqui e vê se funciona:
O que você fez foi acessar um método estático utilizando uma instância … o que é bem diferente do que o texto diz
No mais acho que é isto
abraço e bons estudos
Ramundodavy
É realmente, você não pode acessar (diretamente) membros não estáticos de dentro de um método estático. Isso se da pelo simples fato de que os métodos estáticos não estarem sendo executados em relação a nenhuma instância especifica da classe, em vez disso esta relacionada apenas a classe.
No código acima, Ele acessa um método estático através de uma instância, poderíamos dizer que isso seria simplesmente um truque de sintaxe para permitir que vc use uma variável de instância de objecto. Mas na realidade o compilador deixa passar porque a JVM ira usar a variavel de referencia para localizar o método estático e não o Objeto instanciado, como o compilador sabe que a variável de referencia aponta para um tipo especifico que possue determinado método estatico, entao ele deixa passar com tranquilidade.
bdias1990
Ramundodavy ,
Testei aqui o codigo pego so tem erro que a classe interna esta com modificador public e não pode, mais sobre o acesso ao metodo estático pego oO nem sabia dessa.
abs.
sethbra
bdias1990… onde vc está vendo classe interna no código?
e quem disse que classes internas não podem ter modificar de acesso public?
Ramundodavy
Rapaz, como dizia os nossos amigos do PANICO NA TV… ÔIII eu não intendir nada que bdias1990 falou!!
Testei aqui o codigo pego so tem erro que a classe interna esta com modificador public e não pode, mais sobre o acesso ao metodo estático pego oO nem sabia dessa.
abs.
sethbra:
bdias1990… onde vc está vendo classe interna no código?
e quem disse que classes internas não podem ter modificar de acesso public?
Acho que o bdias1990 se confundiu um pouco, mas na verdade ele quis dizer que as duas classes abaixo não podem estar no mesmo arquivo .java. Para isso uma delas deve deixar de ser public.
class F{
private int x;
public static void metodoStaticPublicA() {
this.x = 10; // erro aqui. x não é static. x deve ser static e o this removido.
}
}
public class MainClass {
public static void main(String... args) {
F.metodoStaticPublicA(); //Acessando método estático
}
}Boa sorte!
Ramundodavy
é, de fato em um arquivo.java só pode haver uma classe de topo de nível, ou simplesmente public!