Как сделать константу в java
В Java константы объявляются с помощью ключевого слова final . Константы обозначаются заглавными буквами и разделяются символом подчеркивания.
Пример объявления константы:
final int MAX_VALUE = 100;
В этом примере мы объявляем константу MAX_VALUE со значением 100. Так как мы использовали ключевое слово final , значение этой переменной не может быть изменено в программе.
Также можно объявить константу как static final для создания глобальной константы, доступной в разных частях программы. Например:
public class Constants public static final int MAX_VALUE = 100; public static final double PI = 3.14159; public static final String MESSAGE = "Hello, world!"; >
Затем можно использовать эти константы в других классах, обращаясь к ним через имя класса:
int max = Constants.MAX_VALUE; double pi = Constants.PI; String message = Constants.MESSAGE;
Как сделать константу в java
JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
«Программистами не рождаются» © 2024 JavaRush
Скачивайте наши приложения
«Программистами не рождаются» © 2024 JavaRush
Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.
Нюансы работы с переменными
Во многих языках программирования есть константы — переменные, значения которых нельзя изменять . Обычно это какие-то фундаментальные вещи типа числа Pi или количества дней в месяцах. Хотя в принципе программист может сделать любую переменную константой, если решит, что это необходимо.
Итак, как же объявить неизменяемую переменную (константу) в Java? Для этого есть специальное ключевое слово — final . Выглядит создание неизменяемой переменной так же, как и создание обычной, только перед типом переменной нужно написать слово final :
final тип имя = значение;
Если вы попытаетесь присвоить final -переменной другое значение, ваша программа просто не скомпилируется.
final -переменную обязательно нужно инициализировать при объявлении (присвоить ей значение). У этого правила есть одно исключение: можно перенести инициализацию переменной класса в конструктор. Но об этом вы узнаете на 10-м уровне.
Чтобы уменьшить количество ключевых слов, разработчики Java используют слово final не только для объявления констант. final также может быть указан перед методом и даже классом. Методы, объявленные как final , нельзя переопределять (override), а от класса, объявленного как final , нельзя наследоваться.
Модификатор final можно добавлять перед любыми переменными: локальными, параметрами, полями класса и статическими переменными.
Обратите внимание, что final — это всего лишь защита от изменения переменной . Если переменная хранит ссылку на объект, объект все-таки менять можно.
final int[] data = ; data = new int[]; data[0] = 0; data[1] = 0; data[2] = 0;
Так нельзя: переменная data объявлена как final .
Глобальные константы
Если вы решите объявить в своей программе глобальные константы, для этого нужно создать статические переменные класса , а также сделать их public и final . Для имен таких переменных существует специальный стиль написания: они пишутся заглавными буквами, а в качестве разделителя слов выступает символ подчеркивания.
class Solution < public static final String SOURCE_ROOT = "c:\\projects\\my\\"; public static final int DISPLAY_WIDTH = 1024; public static final int DISPLAY_HEIGHT = 768; >
2. Затенение переменных
Как мы уже говорили раньше, нельзя в одном методе создать несколько локальных переменных с одинаковыми именами. В разных методах — можно.
Но вот то, чего вы скорее всего не знаете: разрешается, чтобы у переменных класса и локальных переменных метода были одинаковые имена.
public class Solution < public int count = 0; public int sum = 0; public void add(int data) < sum = sum + data; int sum = data * 2; count++; > >
count count, sum count, sum count, sum count, sum, data count, sum, data count, sum, data count, sum, data count, sum
В методе add мы объявили локальную переменную sum , и она до конца действия метода перекрывает (или еще говорят затеняет) собой переменную класса sum .
Ну ок, скажете вы, даже в каком-то смысле ожидаемое поведение. Но это еще не все. Оказывается, если переменную класса затеняет локальная переменная, в методе все-таки существует способ обратиться к переменной класса. Для этого нужно перед ее именем написать ключевое слово this :
this.имя
Вот пример, где конфликт имен успешно решается:
public class Solution < public int count = 0; public int sum = 0; public void add(int data) < int sum = data * 2; this.sum = this.sum + data; count++; > >
this.count this.count, this.sum this.count, this.sum this.count, this.sum this.count, this.sum, data this.count, this.sum, data, sum this.count, this.sum, data, sum this.count, this.sum, data, sum this.count, this.sum
Везде переменные count и sum доступны как с ключевым словом this , так и без него. В тех строках, где локальная переменная sum затеняет переменную класса sum , доступ к переменной класса sum возможен только при использовании this .
Если затеняется не просто переменная класса, а статическая переменная класса, обращаться к ней нужно не через this , а через имя класса:
ClassName.имя
public class Solution < public static int count = 0; public static int sum = 0; public void add(int data) < int sum = data * 2; Solution.sum = Solution.sum + data; count++; > >
Solution.count, Solution.sum Solution.count, Solution.sum Solution.count, Solution.sum Solution.count, Solution.sum Solution.count, Solution.sum Solution.count, Solution.sum, data Solution.count, Solution.sum, data, sum Solution.count, Solution.sum, data, sum Solution.count, Solution.sum, data, sum Solution.count, Solution.sum
Везде статические переменные count и sum доступны как с префиксом в виде имени класса Solution , так и без него. В тех строках, где локальная переменная sum затеняет переменную класса sum , доступ к переменной класса sum возможен только при использовании префикса Solution .
3. Переменные внутри цикла for
И еще один маленький, но интересный факт.
Есть еще место, где особенным образом объявляется переменная — это цикл for .
Если вы помните, обычно у цикла for в круглых скобках объявляется переменная-счетчик. И какова же будет видимость этой переменной? Она ведь не находится в теле цикла — значит, весь метод? Или всё-таки нет?
Правильный ответ такой: переменная, объявленная в заголовке цикла for , видна только в теле цикла и в заголовке цикла for .
public static void main(String[] args) < int a = 0; for (int i = 0; i < 10; i++) < System.out.println(i); > System.out.println("end"); >
a a a, i a, i a, i a a a
Поэтому вы всегда можете в своем коде последовательно написать несколько циклов с переменной-счетчиком с одинаковым именем — проблем не будет.
public static void main(String[] args) < int a = 0; for (int i = 0; i < 10; i++) < System.out.println(i); > for (int i = 0; i < 10; i++) < System.out.println(i); > System.out.println("end"); >
a a a, i a, i a, i a a a, i a, i a, i a a a
Константы в Java на примерах
«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
В этом примере мы использовали перечисление как enum Apple . Идентификаторы 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 >>

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