使用哪个类加载器?

10 浏览
0 Comments

使用哪个类加载器?

我对类加载器有几个问题。\n

Class.forName("class.name");

\n和\n

....
NotYetLoadedClass cls = new NotYetLoadedClass();
.....

\n在每种情况下将使用哪些类加载器?对于第一种情况,我假设使用的是加载执行方法代码的类的类加载器。而对于第二种情况,我假设使用的是线程上下文类加载器。\n如果我理解错误,希望能给出一个简短的解释。

0
0 Comments

在上述内容中,问题"What class loader is used?"的出现原因是由于需要确定在Java中使用哪个类加载器来加载类。解决方法是通过实验来验证使用哪个ClassLoader加载类。

根据Java官方文档,Class.forName()方法使用当前的ClassLoader。通过一个小实验可以证明使用new语句实例化的类也使用当前的ClassLoader。在实验中,我们将当前线程的ContextClassLoader设置为自定义的ClassLoader,并实例化一个SomeClass类的对象。在SomeClass类中,我们打印出当前线程的ContextClassLoader和加载该对象类的ClassLoader。结果显示当前ClassLoader是sun.misc.Launcher.AppClassLoader。

此外,文章中还有一些问答部分的内容,询问了一些与ClassLoader相关的概念的含义,如"the current ClassLoader"和"the current class"。这些问题的回答指出,"the current ClassLoader"指的是正在执行方法的类的定义ClassLoader,而"the current class"是指正在执行方法的类,该类由某个ClassLoader加载,并且在加载新类时该ClassLoader处于首位。

通过实验验证了在Java中使用的是当前的ClassLoader来加载类,同时解释了相关概念的含义。

0