Qual é a diferença entre variáveis ​​globais e variáveis ​​de instância em java?

De primeira classe, não há conceito de variáveis ​​globais em java. Existem dois tipos de variáveis ​​no java, uma associada à classe em si e a segunda relacionada aos objetos criados nessa classe.

  • Quando você declara uma variável estática, ela é associada à classe (do primeiro tipo). O que significa que o jvm criará apenas uma cópia dessa variável na memória, independentemente de quantos objetos você criar dessa classe. Além disso, você pode acessar essa variável usando o nome da classe, portanto, não é necessário instanciar a classe para acessar a variável estática.Por outro lado, quaisquer outras variáveis ​​declaradas na definição de classe serão consideradas variáveis ​​de instância e o jvm criará uma nova cópia dessas variáveis ​​para todos os objetos criados para essa classe. É preciso instanciar a classe e criar objeto para acessar esse tipo de variável.
aluno de classe pública {
    public static int totalStudents = 50;
    // esta é uma variável estática, portanto é do primeiro tipo

    Nome da string;
    Endereço da string;
    // estas são variáveis ​​locais ou podemos dizer variáveis ​​de instância. Estes são diferentes para cada objeto criado pelo aluno.
}

Java não tem variáveis ​​globais. Talvez o questionador tenha em mente campos estáticos. Um campo estático é um membro de uma classe que surge (o armazenamento é alocado) quando a classe é carregada pela primeira vez na memória e inicializada. Existe um campo estático, independentemente de quaisquer instâncias da classe serem criadas. Criar uma instância da classe não faz com que mais memória seja alocada para esse campo; em vez disso, o campo é compartilhado por todas as instâncias dessa classe (na verdade, por todo o código no aplicativo, sujeito, é claro, a quaisquer modificadores de acesso para a classe e para o campo). O código definido fora da própria classe pode acessar o campo qualificando o nome do campo com o nome da classe (por exemplo, MyClass.myField).

Variáveis ​​de instância (geralmente chamadas de campos de instância) são diferentes. O armazenamento é alocado para o campo sempre que uma instância da classe é criada. Um local de memória separado é alocado para o campo para cada instância da classe e o campo associado a uma instância da classe pode ser acessado apenas por meio de uma referência a essa instância (por exemplo, object.field). Dentro da classe, o código pode usar a palavra-chave this como uma referência ao objeto atual e, em muitas situações, o modificador this. pode ser omitido de uma referência de campo e será assumido por padrão.