«Constant (константа)» — слово в английском языке, относящееся в основном к «ситуации, которая не меняется». Это одна из фундаментальных концепций программирования в Java, и у нее нет каких-либо специальных предпосылок или концепций, которые необходимо знать перед изучением, кроме базовых навыков программирования.
Константы в Java используются, когда необходимо реализовать «статическое» или постоянное значение для переменной. Язык программирования напрямую не поддерживает константы. Чтобы сделать любую переменную ею, мы должны использовать модификаторы static и final.
Синтаксис
static final datatype identifier_name = constant;
- Модификатор static делает переменную доступной без загрузки экземпляра ее определяющего класса.
- Последний модификатор делает переменную неизменной.
Причина, по которой мы должны использовать как статические, так и конечные модификаторы, заключается в том, что:
- Когда мы объявим переменную «var» только как статическую, все объекты одного класса смогут получить доступ к этому ‘var’ и изменить его значения.
- Когда мы объявляем переменную только как final, для каждого отдельного объекта будет создано несколько экземпляров одного и того же значения константы, и это неэффективно / нежелательно.
- Когда мы используем как static, так и final, тогда «var» остается статичным и может быть инициализирован только один раз, что делает его надлежащей константой, которая имеет общую ячейку памяти для всех объектов своего содержащего класса.
Пример
static final int MIN_AGE = 18;
Допустим, нам нужно определить, кто имеет право на получение постоянных водительских прав в группе людей. Мы уже знаем, что минимальный возраст для получения постоянных водительских прав составляет 18 лет.
Поэтому вместо того, чтобы просить пользователя ввести минимальный возраст для сравнения, мы объявляем идентификатор MIN_AGE как постоянное целое число со значением 18.
import java.util.*;
public class DrivingLicense{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
static final int MIN_AGE = 18; //Minimum age requirement
int[] list = new int[5];
System.out.println("Enter the age of people:");
for(int i=0;i<5;i++){
list[i] = sc.nextInt();
}
System.out.println("Result for eligibility:");
for(int i=0;i<5;i++) {
if(list[i] >= MIN_AGE)
System.out.println(i + " is Eligible");
else
System.out.println(i + " is Not Eligible");
}
}
}
Вывод:

Зачем нужны?
Константы делают вашу программу более легкой для чтения и понимания, когда ее читают другие. Использование их также повышает производительность, поскольку константы кэшируются как JVM, так и вашим приложением.
Статические и окончательные модификаторы
- Статический модификатор в основном используется для управления памятью.
- Это также позволяет переменной быть доступной без загрузки какого-либо экземпляра класса, в котором она определена.
- Последний модификатор означает, что значение переменной не может измениться. Как только значение назначено переменной, другое значение не может быть переназначено той же переменной.
С помощью модификатора final типы данных Primitive, такие как int, float, char, byte, long, short, double, Boolean, можно сделать неизменяемыми / неизменяемыми. Вместе, как мы поняли ранее, эти модификаторы создают постоянную переменную.
Общий синтаксис
public static final int MAX_VALUE = 1000;
Это соглашение использовать заглавную букву имени переменной, которую мы хотим объявить как константу. Если мы сохраним спецификатор доступа для постоянной переменной как частный, то его значения не могут быть изменены в этом классе.
Если мы оставим спецификатор доступа общедоступным для постоянной переменной, то его значения можно изменить в любом месте программы.
Пример 1
public class ExampleSetOne {
private static final int MAX=10;
public static void main(String[] args){
System.out.println("Final variable MAX="+MAX);
ESO e = new ESO();
e.printMAX();
}
}
class ESO{
private static final int MAX=20;
void printMAX(){
System.out.print("Final variable MAX changed="+MAX);
}
}
Вывод:

Пример 2
public class ExampleSetTwo {
public static final int MAX = 10;
public static void main(String[] args) {
printMAX();
MAX = 20;
printMAX();
}
void printMAX() {
System.out.print("Final variable MAX changed=" + MAX);
}
}
Вывод:

Потенциальные проблемы с постоянными переменными
Работа ключевого слова final в Java заключается в том, что указатель переменной на значение становится неизменным. Это означает, что указатель не может изменить местоположение, на которое он указывает.
Нет гарантии, что объект, на который ссылаются, останется прежним, но только то, что завершаемая переменная всегда будет содержать ссылку на один и тот же объект. Если указанный объект является изменяемым (то есть имеет поля, которые могут быть изменены), тогда константная переменная может содержать значение, отличное от того, которое было изначально присвоено.
Перечисление
- Перечисление — это список именованных констант.
- Это похоже на конечные переменные.
- Перечисление является типом данных, который содержит фиксированный набор констант.
- Перечисление определяет тип класса. Делая перечисления как класс, он может иметь конструкторы, методы и переменные экземпляра.
- Перечисление создается с использованием ключевого слова enum.
Пример 1
enum Apple {
Jonathan, GoldenDel, RedDel, Winesap, Cortland;
}
class EnumDemo {
public static void main(String args[]) {
Apple ap;
ap = Apple.RedDel;
System.out.println("Value of ap: " + ap);// Value of ap: RedDel
ap = Apple.GoldenDel;
if(ap == Apple.GoldenDel)
System.out.println("ap contains GoldenDel.n"); // ap contains GoldenDel.
switch(ap){
case Jonathan: System.out.println("Jonathan is red.");
break;
case GoldenDel: System.out.println("Golden Delicious is yellow."); // Golden Delicious is yellow
break;
case RedDel: System.out.println("Red Delicious is red.");
break;
case Winesap: System.out.println("Winesap is red.");
break;
case Cortland: System.out.println("Cortland is red.");
break;
}
}
}
В этом примере мы использовали перечисление как enum Apple {Jonathan, GoldenDel, RedDel, Winesap, Cortland}. Идентификаторы Jonathan, GoldenDel, RedDel, Winesap и Cortland называются константами перечисления.
Каждый из них неявно объявлен как публичный статический финальный член Apple. Переменная перечисления может быть создана как другая примитивная переменная. Он не использует «новый» для создания объекта.
Apple ap;
‘ap’ имеет тип Apple, единственные значения, которые могут быть назначены (или могут содержать), являются значениями, определенными перечислением.
Например, это назначает
ap = Apple.RedDel;
Все перечисления имеют два предопределенных метода: values() и valueOf(). Синтаксис этих встроенных методов:
public static enum-type [] .values() public static enum-type.valueOf (String str)
Метод values() дает массив, который состоит из списка констант перечисления. Метод valueOf() дает константу перечисления, значение которой соответствует строке, переданной в str.
Пример 2
enum Season {
WINTER, SPRING, SUMMER, FALL;
}
class EnumExample {
public static void main(String[] args) {
for (Season s : Season.values())
System.out.println(s);//will display all the enum constants of Season
Season s = Season.valueOf("WINTER");
System.out.println("S contains " + s);//output: S contains WINTER
}
}
Вывод:

В приведенном выше примере мы использовали два встроенных метода перечисления.
