表達基礎知識
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)。
- 類例項建立表示式。