该类以非常具体的方式java.util.logging.Logger
定位ResourceBundle
实例。我有兴趣了解类加载行为。
丢弃缓存等,首先Logger
该类尝试使用上下文类加载器(这很好,也是我所期望的)。
如果该类加载器无法加载ResourceBundle
(使用ResourceBundle#getBundle(String, Locale, ClassLoader)
call),则接下来使用系统类加载器。这让我有点困惑;我假设调用者的类加载器将是下一个。这是一种优化,还是为了处理一些特定的用例,或者......?
最后,如果系统类加载器无法加载ResourceBundle
,则推断调用堆栈(!)被遍历,并且该堆栈中的每个类都被挖掘为其类加载器,并依次尝试每个类。
对于我遇到或必须编写的所有各种类加载场景,这个对我来说最没有意义。我怀疑这与Logger
' 对任何给定系统的潜在中心性有关,但我欢迎任何解释为什么选择这个特定算法。
(另外,一个不值得自己输入的附带问题:在 JVM 中是否存在上下文类加载器所在的任何情况null
?)