JavaFX应用程序类-默认构造函数和init方法之间的差异
我编写了一个小测试应用程序,如下所示:JavaFX应用程序类-默认构造函数和init方法之间的差异,java,javafx,Java,Javafx,我编写了一个小测试应用程序,如下所示: import javafx.application.Application; import javafx.application.Platform; import javafx.stage.Stage; public class Test extends Application { public Test() { System.out.println("first"); } @Override publ
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;
public class Test extends Application {
public Test() {
System.out.println("first");
}
@Override
public void init() throws Exception {
System.out.println("second");
super.init();
}
@Override
public void start(Stage primaryStage) throws Exception {
System.out.println("third");
Platform.exit();
}
@Override
public void stop() throws Exception {
System.out.println("fourth");
super.stop();
}
public static void main(String[] args) {
launch(args);
}
}
输出为:
first
second
third
fourth
现在,我在问自己,使用默认构造函数还是使用init
方法初始化一些必需的东西之间的区别在哪里
谢谢
注:这个问题与没有重复,因为我的问题不涉及变量的初始化。我的问题是
JavaFX
specific 应用程序类具有您已重写的init()方法。
Init方法将在测试类构造之后立即调用。
Init方法实际上是应用程序类的内部方法。此方法实际上是在内部初始化整个FX应用程序组件
它可以用此方法构造其他JavaFX对象。启动
应用程序时,在启动过程中执行以下步骤:
将创建应启动的应用程序
子类的实例。(调用构造函数)
调用该实例的init()
调用该实例的start
方法
由于调用了start
方法之后,您就可以调用实例的stop
方法
请注意,不需要使用super.init()
和super.stop()
:
来自javadoc
init
和stop
方法具有不做任何事情的具体实现
构造函数、init
和start
的区别是:
建造师
如果您的应用程序不是final
,则可以扩展应用程序类。由于扩展类的构造函数不完整,因此在这种状态下将对该类的引用传递给其他类可能是危险的。此外,该实例尚未初始化到getParameters
方法返回参数的点
init
通常应使用此方法进行初始化。此方法不是从fx应用程序线程运行的,因此某些事情无法通过此方法完成,例如创建阶段
开始
初始化的最后一步。在这里执行需要从应用程序线程运行的操作。但是,请注意不要用长时间运行的操作阻塞该线程,因为这会冻结GUI 可能唯一的区别是,在init
中,您可以获得参数-请参阅,您在这里所说的一切对于构造函数也是正确的。