我发现一些代码以这种方式加载资源:
Class.forName(myClass.class.getName()).getResourceAsStream("myResource");
首先,我想知道使用这种结构的兴趣。看起来Class.forName("className")
启用动态加载,仅在需要时加载类(例如,这是加载JDBC驱动程序时的典型结构)。
然而,在这种情况下,动态加载效率不高,因为类在代码中?如果我写下以下内容会有什么不同吗?
myClass.class.getResourceAsStream("myResource");
答案 0 :(得分:1)
mmyClass.class.getResourceAsStream("myResource");
应该是首选选项,因为它不会进行搜索。结果是相同的,因为myClass.class.getName()
中使用了forName
,而不仅仅是预定义的字符串。
答案 1 :(得分:0)
你写的问题没有多大意义。 Class.forName
和Class.getResourceAsStream
正在做不同的事情。它们是可以互换的。
比较它们的唯一方法是,比较加载一个充满(例如)static
字段的类与数据初始化和读取包含相同数据的资源。如果这就是你说的更好,getResourceAsStream
方法在许多方面都更好:
如果您在询问是否可以使用getResourceAsStream()
加载类(在正常意义上),答案是否定的。当然你可以得到字节码,但你必须做“其他东西”把这些字节码转换成JVM中的可执行类/方法。