gpt4 book ai didi

java - 先用main方法加载类,再手动加载其他类

转载 作者:搜寻专家 更新时间:2023-11-01 03:07:10 25 4
gpt4 key购买 nike

我正在阅读 Cay Horstmann 的 Core Java。这里有一段我​​无法理解的摘录:

At startup, the class containing your mainmethod is loaded. It loads all classes that it needs. Each of those loaded classes loads the classes that it needs, and so on. That can take a long time for a big application, frustrating the user. You can give users of your program the illusion of a faster start with the following trick. Make sure that the class containing themainmethod does not explicitly refer to other classes. First display a splash screen. Then manually force the loading of other classes by calling Class.forName.

您能给我一个小代码示例,以便我理解吗?

最佳答案

引用中提到的技巧基本上是一种让用户产生应用程序加载速度更快的错觉的方法,方法是在调用程序后“立即”显示启动画面,然后才开始加载类。

假设您的应用程序的主类是TheActualApplication。因此,如果将 FastSplash 作为应用程序的启动类,启动画面可能会比将 SlowSplash 用作主类时显示得更快。

public class FastSplasher {
public static void main(String[] args) {
SplashWindow.splash(Splasher.class.getResource("splash.gif"));
SplashWindow.invokeMain("TheActualApplication", args);
SplashWindow.disposeSplash();
}
}

public class SlowSplasher {
public static void main(String[] args) {
SplashWindow.splash(Splasher.class.getResource("splash.gif"));
TheActualApplication.main(args);
SplashWindow.disposeSplash();
}
}

使用 FastSplash 时启动画面可能出现得更快的原因是因为今天的 Java 虚拟机通常有 lazy class resolution打开,因此您可能看不到很大的不同。在急切类解析的情况下,只有在加载了 TheActualApplication 中使用的所有类后,才会显示 SlowSplasher 中的启动画面。在 FastSplasher 中,启动画面会立即出现,因为类 TheActualApplication 是在运行时使用反射动态加载的,无法静态解析,因此无法在启动时加载。

关于java - 先用main方法加载类,再手动加载其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18419178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com