Galera, por que quando um método static usa uma variável de instância, essa variável precisa ser static tbém? Já o inverso funciona… um método não static pode acessar uma variável static… Li que as variáveis static são alocadas antes mesmo da criação de um objeto, isso procede?
Obrigado!
Pense no conceito.
Uma variável de instância precisa do que? de uma instância, precisa existir um objeto dessa classe, e esse objeto terá essa variável.
Uma variável estática é uma variável da classe, portanto a classe só precisa ter sido carregada pelo ClassLoader, não é necessário ter uma instância para acessá-la.
portanto sempre que você tiver uma instância de uma classe, esta classe estará carregada, e as variáveis estáticas serão disponíveis.
Agora nem sempre que você tiver uma classe carregada, terá uma instância dessa classe, por isso não pode acessar uma variável de instância.
E se for pensar também não faz sentido, não tem como você em um contexto estático, saber qual instância você vai usar, a não ser que tenha recebido por parâmetro.
Fez sentido? até eu me enrolei hehehe
pois é, realmente dá um nó na cabeça! Eu pensei nessas coisas, creio também que o compilador iria ficar confuso, pois ao acessar um método static direto pela classe, e dentro desse método ele solicitar acesso a uma VI, esta VI precisaria estar alocada com endereçamento da classe, se não como ele saberia qual VI usar?
int i=10*Math.random();
Usando a classe Math e seu método static, as variáveis de classe precisam estar na memória para serem usadas.
meio confuso… mas eu acho que entender esses conceitos é fundamental rs
Então. Não tem como acessar uma variável de instância em um método estático, a não ser que ela seja enviada por parâmetro ao método.[code]public class Pessoa{
public static void metodo(Pessoa pessoa){
System.out.println(pessoa); // acessando variável de instância
}
}[/code]
entendi, pois o método vai receber a referência.
valeu mesmo digaoneves