我只知道java的基本概念。 今天我从这里学习了超级关键词
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.11.2
在代码示例中找到了此代码段
class Test {
public static void main(String[] args) {
new T3().test(); ---> What is happening here ?
}
}
我可以知道新的T3()。test(); ?这是一个新对象吗?如果那么为什么它不写如下?
T3 ob = new T3().test();
或者他们已经写了,因为test()方法的返回类型是无效的。意味着不能创建引用类型?我对么 ?
任何人都可以帮我理解这个吗?这段代码实际发生了什么?我只知道只有当我们需要创建一个像这样的对象时才会使用这种方式
Classtype vrblName = new Constructor();
答案 0 :(得分:0)
您的表达式解析为(new T3()).test()
,而不是new (T3().test())
,就像它注定要创建一个新对象一样。因此,如注释中所述,它会创建一个T3
对象,在其上调用test()
方法,并丢弃结果。 (T3
对象可能会或可能不会在此过程中存活,因为它可以在其构造函数或test()
中发布指向自身的指针。)它与编写没有什么不同
static T3 findSomeT3() { /* could return a new one or an existing one */ }
public static void main(String[] args) {
findSomeT3().test();
}
完成后也可能会或不会丢弃T3
个对象。
请注意,new
之后的名称不应被视为构造函数;它是一个班级名称。当然,调用构造函数来初始化它,并通过将类的名称视为函数名来声明构造函数,但它仍然是您正在讨论的类。
答案 1 :(得分:0)
我可以知道新的T3()。test(); ?这是一个新对象吗?如果那么为什么它不写如下?
new T3()
创建并返回一个对象。 test()
正在调用方法。
或者他们已经写了,因为test()方法的返回类型是无效的。意味着不能创建引用类型?我是对的吗?
test()
返回void
,但new T3()
肯定会返回一个对象。您可以像T3 t3 = new T3().test();
那样引用它。所以你只需要在一行中完成两项任务。