Boa tarde!
Estou aprendendo Java e não consigo fazer um exercício proposto:
Inserir o ano atual em uma Label. Segue o código:
Calendar cal = Calendar.getInstance();
int ano = cal.get(Calendar.YEAR);
lblAno.setText(Integer.toString(ano));
Ocorre a seguinte mensagem de erro: non-static variable lblAno cannot be referenced from a static contexto.
Agradeço desde já a ajuda
Você está em um método assinado como static e está tentando referenciar um atributo não estático.
Ou você colocar static na declaração do campo ou você retira do método em questão.
Muito obrigado @darlan_machado. Funcionou!
Apenas se atente ao seguinte: a palavra reservada static indica que o método ou atributo que ela está precedendo pertence a classe e não aos objetos da mesma. Neste caso, cada instância de objeto daquela classe terá acesso à tal variável ou método.
Talvez fosse interessante alterar para que você tivesse isso tudo sem o static.
Estou iniciando com as aulas, por isso, fica meio confuso, por não saber bem os conceitos de cada palavra, por isso não entendi muito bem o que quiser dizer na primeira resposta. Por isso a solução foi colocar em outro lugar que não tinha o “static”, como falou.
Veja, você pode ter uma classe assim
public class Foo {
public void boo() {
System.out.println("blablabla");
}
}
Esta é a classe, ok? Você pode criar uma instância de objeto dela da seguinte forma
Foo foo = new Foo(); // foo, com letra minúscula, é a instância de objeto da classe Foo
Para invocar o método boo, você precisa fazer a referência a partir do objeto foo
foo.boo();
Veja que o método boo não tem a palavra estática em nenhum lugar.
Agora, se eu altero e insiro a palavra static antes do método, temos
public class Foo {
public static void boo() {
System.out.println("blablabla");
}
}
Agora, se eu quero invocar o método boo, posso fazê-lo direto
Foo.boo();
Pois o mesmo é estático, ou seja, pertence à classe e não a seus objetos.
Vai funcionar se eu fizer isso
Foo foo1 = new Foo();
foo1.boo();
Mas, como é estático, não é a forma mais adequada de se fazer.
Ficou mais claro?