1
8
没有这样的保证 1 wrt类的加载。 但是,可以保证静态块不会过早运行。触发类初始化的事件在中指定 JLS 12.4.1 .
1-据观察,当前一代Java实现不会不必要地加载类,但这并不能保证。唯一的保证就是它在官方规范中写的内容。 |
2
4
爪哇 specification 州
因此类加载器可以自由地预取类文件。
静态块将仅在类首次使用时执行。 |
3
1
我不认为有任何这样的保证。首先,我见过代码扫描器,它可以在应用程序启动期间处理整个包层次结构/jar中的注释;他们马上就会违背这个假设。 为什么这很重要?你通常是在高度可控的系统加载之后,所以任何重要的地方都是你无论如何都想强迫它的地方 |
4
1
但是请注意,有新的方法来注册服务,例如通过META-INF。这些类也需要加载。
|
5
1
如果不使用反射,则可以使用死代码移除工具静态检查使用了哪些类,例如 ProGuard . 它将分析您的代码并确定使用的所有类。在此基础上,删除未使用的代码,包括库中未使用的代码。
|
6
0
没有其他海报提到的那种保证。但你的问题和你关心的问题并不一致。让你离开library.jar 出去,你不需要这样的保证。 有许多框架可以在运行时发现是否存在其他框架。例:Commons日志记录发现了一堆其他框架。springwebflow在运行时发现脚本框架是什么(例如OGNL)。这些框架显然是使用所有依赖框架编译的,但它们不必在运行时存在。
|
7
0
对。
想想下面这些。如果你添加以下代码
默认系统不会自动加载该代码,因为现有代码都没有引用或不知道
前面的答案中描述了类的加载方式,如果您仔细查看,其中没有一个包含 “如果jar中有类,它将被加载” |