我读了JLS 第 12 章。执行所以它说关于解决方案
解析是检查从 Test 到其他类和接口的符号引用的过程,方法是加载提到的其他类和接口并检查引用是否正确。
在初始链接时,解析步骤是可选的。实现可以从很早就被链接的类或接口解析符号引用,甚至可以递归地解析来自被进一步引用的类和接口的所有符号引用。...
一个实现可能会选择仅在积极使用符号引用时才解析它;对所有符号引用一致使用此策略将代表“最懒惰”的解决形式。在这种情况下,如果 Test 有多个对另一个类的符号引用,那么这些引用可能会在使用时一次解析一个,或者如果在程序执行期间从未使用过这些引用,则可能根本不解析。
例如,实现可以选择单独解析类或接口中的每个符号引用,仅在使用时(延迟或延迟解析),或者在验证类时一次性解析它们(静态解析)。这意味着在某些实现中,在初始化类或接口之后,解析过程可能会继续。
所以我的问题是我是否可以选择/强制使用延迟初始化?也许它需要编写一个自定义类加载器?或者,启动时类加载器中的 ClassNotFoundException 可能会被忽略?
我有条件地创建了一个对象,main
其中不应该实际发生,并且 jar 中缺少相应的类。但是甚至在开始执行之前就NoClassDefFound
被抛出。main