Разница между общедоступными статическими и приватными статическими переменными

class Employee{
 // salary  variable is a private static variable
private static double salary;

// DEPARTMENT is a constant
 public static final String DEPARTMENT = "Development";

public static void main(String args[]){
   salary = 1000;
  System.out.println(DEPARTMENT+  "  average salary:"+salary);
}
}

Эта Java-программа содержит статическую переменную. Но я не могу понять разницу между публичными и приватными статическими переменными.


person Android Girl    schedule 05.05.2012    source источник


Ответы (5)


Общедоступная переменная доступна отовсюду в коде, а приватная переменная доступна только внутри самого класса. В этом случае вы используете Employee.salary в классе Employee, так что все в порядке.

Обратите внимание, что статическая переменная — это совершенно отдельный вопрос, а методы и классы доступны так же, как и переменные.

Также доступны другие уровни доступа — protected и доступ по умолчанию «пакет» (который не может быть указан явно). См. раздел 6.6 Спецификации языка Java. подробнее.

(Кроме того, стоит также узнать, что означает static — вы почти наверняка не хотите, чтобы эти переменные были статическими, поскольку они применяются к каждому Employee, а не понятие Employee в целом. Странно, что DEPARTMENT тоже здесь константа.)

person Jon Skeet    schedule 05.05.2012
comment
Я не думаю, что нам когда-либо понадобятся частные статические переменные. - person Tofeeq Ahmad; 17.07.2013
comment
@Sameer: ​​я полностью не согласен. Хотя я вообще не люблю статические переменные, я, конечно, не стал бы утверждать, что они никогда не нужны. Единственные статические переменные, которые вы когда-либо использовали, были константами? (Даже константы могут быть лучше закрытыми, иногда...) - person Jon Skeet; 17.07.2013
comment
@JonSkeet Если я использую частную статическую переменную, получит ли она память при запуске приложения (например, приложения Android), даже если экземпляр класса не создается? как публичная статическая переменная получает память? - person Dharmendra; 16.06.2014
comment
@Dharmendra: Да, общедоступный/частный не имеет значения с точки зрения памяти. - person Jon Skeet; 16.06.2014
comment
@AustinWBryan: Тот факт, что слово может использоваться в качестве ключевого слова, не означает, что оно всегда должно указываться кодовым шрифтом в Markdown. В этом случае и public, и static лучше читать как обычные слова, IMO. - person Jon Skeet; 25.06.2018
comment
@JonSkeet Хорошо, спасибо, я подумаю об этом в следующий раз. Итак, когда следует использовать ключевое слово в уценке кода? - person AustinWBryan; 25.06.2018
comment
@AustinWBryan: В основном, когда вы имеете в виду ключевое слово, а не концепцию. Иногда это серая зона, хотя. - person Jon Skeet; 25.06.2018

  • Переменная public доступна из любого места (ну, из любого места, где доступен класс).

  • Переменная private доступна только внутри класса.

  • Переменная static принадлежит классу, а не экземпляру класса.

  • Обратите внимание, что переменная DEPARTMENT также является final, что означает, что ее нельзя изменить после ее установки. Это важно здесь, потому что это то, что спасает это от плохого кода - переменная является константой, поэтому можно дать доступ к ней вещам вне класса.

person trutheality    schedule 05.05.2012
comment
ОТЛИЧНО. Я запутался в финале. - person Android Girl; 05.05.2012

private static double salary

доступен только внутри класса и может быть доступен как

salary or Employee.salary

Пока

 public static final String DEPARTMENT

Доступ к этому классу также может быть получен следующим образом

Employee.DEPARTMENT
person Manish Mulani    schedule 05.05.2012

public static - доступ к ним можно получить как внутри класса, так и за его пределами.

private static - доступ возможен только из класса.

Статика считается анти-OOS в OOPS.

class Dog
{
    public static string X;
    private static string y;
}

Доступ к y возможен только изнутри Dog либо через Dog.y, либо только через y. Доступ к X можно получить где угодно через Dog.X или, если вы находитесь в классе или используете using static Dog в качестве заголовка, просто X.

person Preetham R U    schedule 22.04.2015

Очевидно, что вы не можете получить доступ к статической переменной private извне класса, и вы можете получить доступ к статической переменной public из любого места.

person Andrew Logvinov    schedule 05.05.2012
comment
Посмотрите еще раз. Переменная зарплата является частной. Но если она частная, как может эта строка public static void main(String args[]){ зарплата = 1000; доступ к зарплате? - person Android Girl; 05.05.2012
comment
@Androidmaid: потому что вы обращаетесь к нему из того же класса (сотрудник). - person Jon Skeet; 05.05.2012
comment
с современными компьютерами/технологиями небольшой объем памяти не причинит никакого вреда - person BeyondProgrammer; 27.06.2014