Java 构造函数不能返回值。为什么我们仍然可以在构造函数上调用实例方法?例如。为什么 new Foo().bar()
是合法的,其中 bar()
是类 Foo
的实例方法?
最佳答案
虽然构造函数不返回值,但表达式 new Foo()
确实求值 为一个表达式——即新创建对象的引用值。
事实上,这就是 Foo var = new Foo()
的工作原理。那里没有什么特别的:您正在声明一个新变量 var
,并将其分配给某个表达式的结果。碰巧评估该表达式也会创建一个新对象。
new Foo().bar()
等同于 (new Foo()).bar()
。它计算表达式 (new Foo()
),该表达式在编译时具有静态类型 Foo
,然后对结果值执行操作(调用 code>bar()
方法)。
在这方面,它类似于 (a + b) * c
,它计算表达式 ((a + b)
),然后对表达式执行操作结果值(乘以 c
)。
关于Java:在构造函数上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32572081/