表達基礎知識
Java 中的表示式是進行計算的主要構造。這裡有些例子:
1 // A simple literal is an expression
1 + 2 // A simple expression that adds two numbers
(i + j) / k // An expression with multiple operations
(flag) ? c : d // An expression using the "conditional" operator
(String) s // A type-cast is an expression
obj.test() // A method call is an expression
new Object() // Creation of an object is an expression
new int[] // Creation of an object is an expression
通常,表示式由以下形式組成:
- 表示式名稱包括:
- 簡單識別符號; 例如
someIdentifier
- 合格的識別符號; 例如
MyClass.someField
- 簡單識別符號; 例如
- 初級包括:
- 文字; 例如
1
,1.0
,'X'
,hello
,false
和null
- 類文字表達; 例如
MyClass.class
this
和<TypeName> . this
- 括號表示式; 例如
( a + b )
- 類例項建立表示式; 例如
new MyClass(1, 2, 3)
- 陣列例項建立表示式; 例如
new int[3]
- 欄位訪問表示式; 例如
obj.someField
或this.someField
- 陣列訪問表示式; 例如
vector[21]
- 方法呼叫; 例如
obj.doIt(1, 2, 3)
- 方法參考(Java 8 及更高版本); 例如
MyClass::doIt
- 文字; 例如
- 一元運算子表示式; 例如
!a
或i++
- 二元運算子表示式; 例如
a + b
或obj == null
- 三元運算子表示式; 例如
(obj == null) ? 1 : obj.getCount()
- Lambda 表示式(Java 8 及更高版本); 例如
obj -> obj.getCount()
不同形式的表達的細節可以在其他主題中找到。
- 該運算子主題包括一元,二元和三元操作符表示式。
- 該 Lambda 表示式主題包括 lambda 表示式和方法引用表示式。
- “ 類和物件” 主題涵蓋類例項建立表示式。
- 該陣列主題包括陣列訪問表示式和陣列例項建立表示式。
- 在字面的話題涵蓋了不同型別的文字表述。
表示式的型別
在大多數情況下,表示式具有靜態型別,可以通過檢查及其子表示式在編譯時確定。這些被稱為獨立表示式。
但是,(在 Java 8 及更高版本中)以下型別的表示式可能是多重表示式 :
- 帶括號的表示式
- 類例項建立表示式
- 方法呼叫表示式
- 方法引用表示式
- 條件表示式
- Lambda 表示式
當表示式是 poly 表示式時,其型別可能受表示式的目標型別的影響 ; 即它用於什麼。
表示式的值
表示式的值與其型別相容。例外情況是堆汙染發生時; 例如,因為不安全轉換警告已被(不適當地)抑制或忽略。
表達陳述
與許多其他語言不同,Java 通常不允許將表示式用作語句。例如:
public void compute(int i, int j) {
i + j; // ERROR
}
由於評估表示式的結果不能使用,並且由於它不能以任何其他方式影響程式的執行,因此 Java 設計者採取的態度是這種使用是錯誤的,或者是錯誤的。
但是,這不適用於所有表示式。表示式的子集(實際上)是合法的語句。該套裝包括:
- 賦值表示式,包括操作和成為賦值。
- 前後增量和減量表示式。
- 方法呼叫(
void
或非void
)。 - 類例項建立表示式。