可以在java中创建实例的同一行中调用方法吗
当我尝试对下面的代码执行相同操作时,它不起作用:可以在java中创建实例的同一行中调用方法吗,java,methods,constructor,dot-operator,Java,Methods,Constructor,Dot Operator,当我尝试对下面的代码执行相同操作时,它不起作用: class BooleanWrap{ boolean b = new Boolean("true").booleanValue(); } 编译错误: java:6:错误:不兼容的类型 TestBox t=newtestbox().go() 当我将方法go()的返回类型从void更改为类类型时,我不再得到错误 class TestCode { public static void main(String[] ar) {
class BooleanWrap{
boolean b = new Boolean("true").booleanValue();
}
编译错误:
java:6:错误:不兼容的类型
TestBox t=newtestbox().go()
当我将方法go()
的返回类型从void
更改为类类型时,我不再得到错误
class TestCode {
public static void main(String[] ar) {
TestCode tc = new TestCode().go();
}
void go() {
//some code
}
}
我刚才在上述代码中创建的对象(由
tc2
引用)会发生什么情况?它会被放弃吗?TestCode tc=new TestCode().go()
只有在go()
方法返回一个TestCode
时才起作用,因为您要将它赋给TestCode
类型的变量
在
TestCode2的情况下,tc2=newtestcode2().go()
,如果go()
方法返回对TestCode2
的不同实例的引用(即不是您为其调用的go()
),则原始实例将不会在任何位置被引用,并且将符合垃圾收集的条件。换句话说,tc2
将引用由go()
返回的实例,该实例不必与使用newtestcode2()
在主方法中创建的实例相同。这应该可以正常工作:
class TestCode2 {
public static void main(String[] ar) {
TestCode2 tc2 = new TestCode2().go();
}
TestCode2 go() {
//some code
}
}
编辑:其他信息
这样就无法保存创建的实例。它将在下一次垃圾收集中立即被销毁。因此,通常情况下,为了避免这种不必要的创建和破坏,如果不需要实例本身,将使用静态方法
class TestCode{
public static void main(String[] ar){
new TestCode().go();
}
void go() {
System.out.println("Hello World");
}
}
正如Eran所说,方法go()不返回任何内容,而您正试图将该内容分配给变量,您的方法需要返回一些内容,在本例中是TestCode对象,这就是我的意思。编辑的答案更精确。是的,那这个物体呢?由于它是唯一被引用的引用变量,现在引用其他对象。@user1851607变量tc2从未引用由
new TestCode2()
创建的实例。它只引用了由go()
返回的实例。不,它不会。无法将void方法链接到构造函数调用。对不起,我的错误。我对下面的答案感到困惑。你不想归还任何东西。我看不出来。这无法解释问题所在。
class TestCode{
public static void main(String[] ar){
TestCode.go();
}
static void go() {
System.out.println("Hello World");
}
}