Java构造函数无法返回值。那为什么我们仍然可以在构造函数上调用实例方法?例如。为什么new Foo().bar()
合法bar()
是类Foo
的实例方法?
答案 0 :(得分:3)
虽然构造函数没有返回值,但表达式new Foo()
会评估到表达式 - 即新创建的对象的引用值。
事实上,Foo var = new Foo()
是如何运作的。那里没有什么特别之处:您正在声明一个新变量var
,并将其分配给某个表达式的结果。恰好,评估该表达式也会创建一个新对象。
new Foo().bar()
相当于(new Foo()).bar()
。它计算表达式(new Foo()
),它在编译时具有静态类型Foo
,然后对结果值执行操作(调用bar()
方法)。
在这方面,它类似于(a + b) * c
,它评估表达式((a + b)
),然后对结果值执行操作(乘以c
)
答案 1 :(得分:2)
Java构造函数无法返回值。那为什么我们仍然可以在构造函数上调用实例方法?
构造函数在new Foo().bar()
的情况下不返回任何内容。在Foo
类bar()
上调用的方法会返回您正在捕获的内容。
为什么编写新的Foo()。bar()?
是合法的
它100%合法,因为它等同于
Foo foo = new Foo();
foo.bar();
答案 2 :(得分:1)
它是实例化对象的“new”关键字,而不是构造函数,它是您从中调用foo的对象。构造函数只是告诉编译器必须为新实例化的实例做什么。
当你编码:new Foo()。bar();发生以下情况。
答案 3 :(得分:0)
Java Constructor返回该类的实例。 'new Foo()'正在创建Foo类的对象,你正在调用该对象的bar()方法。 所以它完全合法!!