java Class.forName 问题 高手帮忙
发布网友
发布时间:2023-09-26 16:26
我来回答
共4个回答
热心网友
时间:2024-08-13 10:59
public T newInstance()
throws InstantiationException,
IllegalAccessException创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。
注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。
返回:
此对象所表示的类的一个新分配的实例。
抛出:
IllegalAccessException - 如果该类或其 null 构造方法是不可访问的。
InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。
ExceptionInInitializerError - 如果该方法引发的初始化失败。
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝创建该类的新实例
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包
你看看api吧,你的Test01是个实体类还被载入了,肯定不会有异常了。
try {
c = null;
Test01 t = (Test01) c.newInstance();
} catch (Exception e) {
System.out.println("创建实例失败!");
}
你改成这样就创建失败了。
热心网友
时间:2024-08-13 10:59
你对Test01打包了package com.test; 而且Test01的无参构造方法不是public的,包外访问不了,所以不能newInstance();改成:
public Test01(){
System.out.println("实例创建成功");
}
热心网友
时间:2024-08-13 11:00
刚才帮你测试了一下 我这里怎么是成功的...
debug:
Class 加载成功
实例创建成功
成功生成(总时间:3 秒)
你在System.out.println("创建实例失败!"); 前面加多一句e.printStackTrace();然后看它输出什么错误
热心网友
时间:2024-08-13 11:00
“实例创建失败!” 在哪里打印的??你捕捉异常的是创建实例失败。我的也是成功,自己Debug下,很好解决的