为什么Class.forName(" Test")。getClassLoader()?

时间:2014-12-29 11:10:43

标签: java classloader

为什么需要使用getClassLoader()对象调用Class?为什么我不能简单地使用该包中存在的任何类的对象调用getClassLoader()?例如,为什么我只能使用Classloader得到哪个(new Test()).getClassLoader()加载我的课程?

2 个答案:

答案 0 :(得分:1)

您需要区分类和对象。

Test t = new Test()

会产生一个物体。如果你想要它的类加载器,你需要访问对象的类,因为类加载器加载类而不是对象。让我们说

ClassLoader cl =  t.getClass().getClassLoader();

如果您只想引用加载Test的类加载器,您还可以编写Test.class.getClassLoader()。

答案 1 :(得分:0)

正如BackSlash所写,ClassLoader加载类并在类对象中引用。如果在类的实例中引用它,那么此引用将附加到VM中的everey对象,从而扩大对象的大小。由于对象无论如何都引用了它们的类对象,因此不需要在每个对象中复制类加载器引用。