Class.forName()与直接类加载

时间:2012-12-18 07:36:28

标签: java class

我发现一些代码以这种方式加载资源:

Class.forName(myClass.class.getName()).getResourceAsStream("myResource");

首先,我想知道使用这种结构的兴趣。看起来Class.forName("className")启用动态加载,仅在需要时加载类(例如,这是加载JDBC驱动程序时的典型结构)。

然而,在这种情况下,动态加载效率不高,因为类在代码中?如果我写下以下内容会有什么不同吗?

myClass.class.getResourceAsStream("myResource");

2 个答案:

答案 0 :(得分:1)

mmyClass.class.getResourceAsStream("myResource");应该是首选选项,因为它不会进行搜索。结果是相同的,因为myClass.class.getName()中使用了forName,而不仅仅是预定义的字符串。

答案 1 :(得分:0)

你写的问题没有多大意义。 Class.forNameClass.getResourceAsStream正在做不同的事情。它们是可以互换的。

比较它们的唯一方法是,比较加载一个充满(例如)static字段的类与数据初始化和读取包含相同数据的资源。如果这就是你说的更好,getResourceAsStream方法在许多方面都更好:

  • 您可以通过这种方式阅读的数据量没有限制,
  • 您不必将数据嵌入“代码”,
  • 你的记忆足迹会更小,
  • 您只需加载所需数据的子集
  • 可能更快,
  • 等等。

如果您在询问是否可以使用getResourceAsStream()加载类(在正常意义上),答案是否定的。当然你可以得到字节码,但你必须做“其他东西”把这些字节码转换成JVM中的可执行类/方法。