Java:在构造函数上调用方法

时间:2015-09-14 19:05:40

标签: java

Java构造函数无法返回值。那为什么我们仍然可以在构造函数上调用实例方法?例如。为什么new Foo().bar()合法bar()是类Foo的实例方法?

4 个答案:

答案 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()的情况下不返回任何内容。在Foobar()上调用的方法会返回您正在捕获的内容。

  

为什么编写新的Foo()。bar()?

是合法的

它100%合法,因为它等同于

Foo foo = new Foo();
foo.bar();

答案 2 :(得分:1)

它是实例化对象的“new”关键字,而不是构造函数,它是您从中调用foo的对象。构造函数只是告诉编译器必须为新实例化的实例做什么。

当你编码:new Foo()。bar();发生以下情况。

  • 创建 Foo
  • 实例
  • 然后,实例将调用 Foo的构造函数
  • 然后返回实例。
  • 现在为返回的实例调用 bar()

答案 3 :(得分:0)

Java Constructor返回该类的实例。     'new Foo()'正在创建Foo类的对象,你正在调用该对象的bar()方法。 所以它完全合法!!