Доступ к статической переменной из объекта в Java

почему мы можем получить доступ к статической переменной из объекта в Java, как показано ниже?

public class Static {
  private static String x = "Static variable";

  public static void main(String[] args)
  {
    Static member = new Static();
    System.out.println(member.x);
  }   
}

4 ответов


Как правило, общедоступные переменные могут быть доступны всем, а частные переменные могут быть доступны только из текущего экземпляра класса. В вашем примере вам разрешено получить доступ к x переменной от main метод, потому что этот метод находится в статическом классе.

Если вам интересно, почему вам разрешен доступ к нему из другого экземпляра статического класса, чем тот, в котором вы сейчас находитесь (который обычно не разрешен для частных переменных), это просто потому, что статические переменные существуют не для каждого экземпляра, а для каждого класса. Это означает, что одна и та же статическая переменная A можно получить доступ из всех экземпляров A.

Если бы это было не так, никто не смог бы получить доступ к частной статической переменной вообще, так как она не принадлежит один экземпляр, но все они.


Не рекомендуется ссылаться на статическую переменную таким образом.

однако ваш вопрос был почему это разрешено? Я бы предположил, что ответ заключается в том, что разработчик может изменить член экземпляра (поле или переменную) на статический член без необходимости изменять все ссылки на этот член.

Это особенно верно в средах с несколькими разработчиками. В противном случае ваш код может не скомпилироваться только потому, что ваш партнер изменил некоторые переменные экземпляра на статическая переменная.


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

as member является объектом класса Static, поэтому вы можете получить доступ ко всем статическим как wll как нестатическим переменным статического класса через объект-член.


нестатический элемент является членом экземпляра. Статический член (класс wide) не может получить доступ к членам экземпляра, потому что нет способа определить, какой экземпляр владеет какими-либо конкретными нестатическими членами.

объект экземпляра всегда может ссылаться на статические члены, поскольку он принадлежит классу, который глобальный (общий) для его экземпляров.