Я изо всех сил пытаюсь понять, как константу можно определить без использования литерала. Есть final int A = 1 + 1
count?Как определить константу без использования литерала?
ответ
Спецификация языка Java определяет Constant Expressions. Первый пункт - «Литералы примитивного типа и литералы типа String», поэтому эти литералы также являются константами. Аналогичным образом в нем перечислены «Простые имена (§6.5.6.1), которые относятся к постоянным переменным». Однако существует много других форм выражения, которые составлены с использованием только определенных операторов, которые также определены как постоянные выражения. См. Связанный раздел для полных правил.
Константа представляет собой значение, которое не изменяется:
int getRandomNumber() {
//chosen by a fair dice roll, guaranteed to be random
return 4; //<- literal
}
public final int random = getRandomNumber(); //<- constant
Здесь random
не буквальным, так как он является результатом вызова метода. Это, однако, постоянное, поскольку оно объявлено final
.
Java имеет ограниченное число литералов:
String a = "a"; // string literal
int three = 3; // number literal
int[] manyThree = {3,3,3}; //an array literal consisting of number literals
Но любой переменной может быть константой, объявив ее final
.
Ну, вы можете легко иметь нелитеральную константу. Отнесите:
public class A {
public static final int A_CONSTANT = new java.util.Random().nextInt();
}
A.A_CONSTANT
, безусловно, является постоянным - это final
и static
, поэтому после загрузки, что класс, он не меняется! Тем не менее, это не буквальный - он постоянный во время выполнения, а не во время компиляции. Каждый раз, когда A
загружен, A_CONSTANT
имеет новое, постоянной значения, в то время как буквальный 4
всегда точно 4.
Литерал не является константой она постоянна. (без a) Константа - это имя для значения, которое может быть представлено литералом. (Или другой константой)
Что вы подразумеваете под "константой"? – Radiodef
Примеры вашего вопроса в java пожалуйста. – KevinDTimm
'(3 + 2)' тоже константа, но не буквальная; также он не оценивается во время выполнения. – fabian