Код: Выделить всё
class S { int x = 0; }
class Test1 {
public static void main(String[] args) {
S s = new S();
System.out.println("s.x=" + s.x);
}
}
Код: Выделить всё
s.xНиже приведен соответствующий синтаксис, взятый мной из Спецификации языка Java:
15.11:
FieldAccess:
Основной . Идентификатор
супер . Идентификатор
TypeName . супер. Идентификатор
15.8: Первичный:
PrimaryNoNewArray
ArrayCreationExpression
PrimaryNoNewArray:
ЛитералClassLiteral
это имя типа. это
( Выражение )
ClassInstanceCreationExpression
FieldAccess
ArrayAccess
MethodInvoke
MethodReference
Если смотреть только на синтаксис из приведенного выше фрагмента, то s.x, по-видимому, не соответствует синтаксису. Причина в том, что s, по-видимому, не принадлежит ни одному из членов первичных выражений.
К счастью , спецификация дает объяснение позже, и именно в этом заключаются мои сомнения:
Эта часть грамматики Java язык программирования необычен
в двух отношениях. Во-первых, можно было бы ожидать, что простые имена, такие как имена
локальных переменных и параметров метода, будут первичными выражениями. По
техническим причинам имена группируются вместе с первичными выражениями
чуть позже, когда будут введены постфиксные выражения (§15.14).
"имена группируются вместе с основными выражениями чуть позже, когда вводятся постфиксные выражения", Насколько я понимаю это предложение, имя будет стать членом основных выражений при определенных обстоятельствах.
15.14:
Постфиксные выражения включают использование постфикса + Операторы + и --.
Имена не считаются основными выражениями (§15.8), но
обрабатываются в грамматике отдельно, чтобы избежать определенной двусмысленности. Они
становятся взаимозаменяемыми только здесь, на уровне приоритета
постфиксных выражений.
Мой вопрос:
1.Правильно ли мое понимание выше?
2.»Они становятся взаимозаменяемыми только здесь, на уровне приоритета
постфиксных выражений ",
(1).Что означает это предложение?
(2).Можете ли вы объяснить на моем примере, почему s в s.x становится является членом основных выражений здесь? (При условии, что я правильно понимаю.)
(3). Какова связь между этим и уровнем приоритета постфиксных выражений?(4). Что означает «взаимозаменяемость»?
Спасибо, что читаете.
Подробнее здесь: https://stackoverflow.com/questions/789 ... expression
Мобильная версия