Как нестатический метод обращается к статическим членам в java?

Учти это:

class SomeClass
{
   static int a;
   int method()
   {
      int b = a;
      return b;
   }
}

Как осуществляется доступ к a в методе? Это this.a или someClass.a?

EDIT: Извините, если я не совсем ясно выразился в своем вопросе. Я хочу знать следующее: * Существует ли скрытый this или someClass, связанный с amethod] или это просто методметоде], который обращается к члену класса?


person Alvin3001    schedule 15.10.2015    source источник
comment
stackoverflow.com/questions/17242649 /   -  person Viraj Nalawade    schedule 15.10.2015
comment
поскольку это переменная static, ее значение всегда одинаково, независимо от того, как вы пытаетесь получить к ней доступ, вы получите одинаковое значение для this.a, SomeClass.a или просто a   -  person Sajan Chandran    schedule 15.10.2015
comment
Можно считать его единственным членом класса, также доступным как SomeClass.a.   -  person Joop Eggen    schedule 15.10.2015


Ответы (4)


Это просто a: одно и то же поле для любого экземпляра класса. Вы можете написать someClass.a, если вам нужно явное устранение неоднозначности.

Внимательно подумайте, почему вам нужен нестатический метод, который возвращает статический член: мне кажется, что код "пахнет".

person Bathsheba    schedule 15.10.2015

Я отредактирую ваш пример, чтобы он выглядел немного правильнее:

public class SomeClass
{
   private static int a = 1;
   public int method()
   {
      int b = a;
      return b;
   }
}

int b = a; равно int b = SomeClass.a;

Не путайте с this — это ссылка на объект. Статические поля принадлежат классу, а не объекту, поэтому неправильно получать a с this.a

И, как уже упоминалось здесь:

Методы экземпляра могут напрямую обращаться к переменным класса и методам класса.

person hammelion    schedule 15.10.2015
comment
поэтому невозможно получить a с помощью this.a - Конечно? - person Aleksandr M; 15.10.2015

Если вы находитесь внутри класса, вы можете получить к нему доступ, просто позвонив a

Из любого другого класса вы получите этот статический член, используя someClass.a

person Parker_Halo    schedule 15.10.2015
comment
Или вызывая его через экземпляр, но это просто плохой код. - person Stultuske; 15.10.2015

Пока статический член является общедоступным, вы можете использовать «SomeClass.a» из любого класса. Для закрытых членов создайте метод доступа, если вам действительно нужен доступ к члену и из класса, просто укажите его как «a».

person MrPublic    schedule 15.10.2015