Как нестатичният метод осъществява достъп до статични членове в java?

Помислете за това:

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

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

РЕДАКТИРАНЕ: Съжалявам, ако въпросът ми не е ясен. Това, което искам да знам е: *Има ли скрит this или someClass, свързан с amethod] или просто aметод] има достъп до члена на класа?


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