我有一个课程如下:
package org.requiredinput.rpg1.desktop;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import org.requiredinput.rpg1.Rpg1;
public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config =
new LwjglApplicationConfiguration();
config.title = "Awesome rpg";
config.width = 800;
config.height = 480;
new LwjglApplication(new Rpg1(), config);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 在最后一行,使用的new语句没有前面的=.正在创造什么?一个新LwjglApplication对象?类?
为什么不需要像实例那样app = new LwjglApplication()进行实例化?
APe*_*son 11
您的代码创建了一个新对象,并没有为其指定名称,这意味着main()之后不能使用它.构造函数中的代码仍将运行,LwjglApplication仍将创建一个类型的对象.main()但是,它不会引用它.
这就像调用一个返回值而不将其赋值给变量的函数一样:
int foo() {
System.out.println("Ron Paul 2016!");
return 42;
}
public static void main(String... args) {
foo(); // will print out "Ron Paul 2016!" (w/o quotes)
}
Run Code Online (Sandbox Code Playgroud)
在这里,没有对返回值进行任何操作,foo()但println()调用仍将运行.
当构造函数(在这种情况下,构造函数LwjglApplication)具有有益的副作用时,通常使用此方法.在您的特定情况下,由于构造函数而弹出一个窗口.(正如RafazZ所说,您不需要访问正在构建的对象,因为有其他方法可以访问它,通过第三方供应商的API提供.)
正如Drew Kennedy在评论中提到的,这种模式也用于一次性对象.
假设你有一个看起来像这样的类:
class Foo {
void bar() {
// stuff that requires being in an instance, such as...
System.out.println(this.getClass());
}
public static void main(String... args) {
(new Foo()).bar();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,程序不会为新创建的Foo对象分配名称,因为它仅用于调用其bar()方法.