gpt4 book ai didi

java - Class.forname ("name").newInstance() 与 name.class.newInstance : Difference in usage perspective

转载 作者:行者123 更新时间:2023-11-30 06:12:25 25 4
gpt4 key购买 nike

我将从我的示例开始:我有一个类 classload.Loadable

package classload;

public class Loadable {
static{
System.out.println("Loaded already.....");
}
public Loadable(){
System.out.println("Now created.....");
}
}

将通过以下两种方式加载并创建实例。

首先:

 public static void main(String[] args) throws Exception {
System.out.println("Starting .....");
Class.forName("classload.Loadable").newInstance();
}

第二:

 public static void main(String[] args) throws Exception {
System.out.println("Starting .....");

classload.Loadable.class.newInstance();
}

两者都给出与预期相同的输出(因为 Class.forname 返回相同的 class 对象):

Starting .....
Loaded already.....
Now created.....

我想知道我们在哪些场景中使用Class.forname 以及我们可以直接使用.class 对象的地方

最佳答案

最简单的解决方案是使用

new Loadable();

如果类在编译时已知并且您希望它在运行时可用。注意:如果它不可用,这将在运行时抛出一个 NoClassDefError

如果您不确定它在运行时是否可用,您可以使用

Class.forName("classload.Loadable").newInstance();

因为更清楚将抛出哪些异常。

问题

classload.Loadable.class.newInstance()

是它在任何一种情况下都不是特别有用。

注意:Class.newInstance() 有一个已知问题,它会抛出您不知道的checked 异常。也就是说,如果构造函数抛出一个已检查的异常,它不会被包装,并且编译器无法判断将抛出什么。

关于java - Class.forname ("name").newInstance() 与 name.class.newInstance : Difference in usage perspective,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32919494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com