Одним из аспектов объектно-ориентированного подхода, который сделал его настолько популярным, является то, что вы можете скрыть свои переменные внутри класса. Класс становится как контейнер. Теперь вы, как программист, можете решить, как вы хотите, чтобы пользователи вашего класса взаимодействовали с ним. В Java традиция заключается в предоставлении API - открытого интерфейса для вашего класса с использованием методов этого класса.
Чтобы этот подход работал, вы объявляете свои переменные как закрытые (что означает, что только методы в вашем классе могут получить к ним доступ), а затем предоставляете другие методы для доступа к ним. Например,
private int someNumber;
Доступ к этой переменной возможен только из вашего класса. Как вы думаете, другие могут нуждаться в доступе за пределами класса? Вы бы создали метод, разрешающий доступ:
public int getSomeNumber()
{
return someNumber;
}
Возможно, пользователям вашего класса также понадобится возможность установить someNumber. В этом случае вы также предоставляете метод для этого:
public void setSomeNumber( int someNumber )
{
this.someNumber = someNumber;
}
Почему все это работает только для того, чтобы получить доступ к ученику, которого вы могли бы так же легко объявить общедоступным? Если вы делаете это, используя этот подход, вы можете контролировать доступ других людей к данным в вашем классе. Представьте, что вы хотите убедиться, что для someNumber задано только число <100. Вы можете обеспечить эту проверку в своем методе setSomeNumber. Объявляя переменные частным доступом, вы защищаете свой класс от неправильного использования и упрощаете его для всех, кто должен его использовать, в том числе для себя! </p>
Объявление переменной для статического доступа означает, что вам не нужен экземпляр класса для доступа к переменной. В Java, как правило, вы пишете класс, а затем создаете его экземпляр. Вы можете иметь столько экземпляров этого класса, сколько захотите, и все они будут отслеживать свои собственные данные. Вы также можете объявить переменные, которые являются частью самого класса , и именно здесь используется ключевое слово static. Если вы создаете переменную ...
static int classVariable = 0;
переменная может быть доступна без экземпляра класса. Например, вы можете видеть, что время от времени это делается:
public static final int MY_CONSTANT = 1;
Хотя есть лучшие способы сделать это сейчас, это все еще распространенная модель. Вы используете эту переменную без какого-либо экземпляра класса, как это:
myInstance.setSomeNumber( MyClass.MY_CONSTANT );
java.awt.Color использует статические переменные таким образом. Вы также можете объявить методы как статические (посмотрите на public static void main, отправную точку для ваших программ). Статика полезна, но используйте ее экономно, потому что создание экземпляров классов часто может привести к лучшему дизайну.
Наконец, (каламбур предназначен), зачем вам объявлять переменную финальной? Если вы знаете, что значение никогда не должно изменяться, объявление его как окончательного означает, что если вы напишите какой-то код, который пытается изменить это значение, компилятор начнет жаловаться. Это опять-таки помогает защитить от глупых ошибок, которые могут привести к действительно раздражающим ошибкам.
Если вы посмотрите на пример статической переменной, также используется ключевое слово final. Это время, когда вы решили, что хотите сделать переменную общедоступной, но также хотите защитить ее от изменения. Вы делаете это, делая это публичным и окончательным.