表达基础知识
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
)。 - 类实例创建表达式。