为什么下面的代码片段会产生编译时错误?编译器显示“未处理的异常类型ClassNotFoundException”。
public class ClassObjectTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Class s=Class.forName("java.lang.Thread");
}
}
答案 0 :(得分:3)
我猜你在混合什么。您的代码段无法编译,因为方法Class.forName(className)
可能抛出异常ClassNotFoundException
如果对于传递的类名,则在当前类路径中找不到类。
如果编译代码,则会出现此编译错误
error: unreported exception ClassNotFoundException; must be caught or declared to be thrown
表示:
将方法调用放入try-catch块
try {
Class s = Class.forName("java.lang.Thread");
} catch (ClassNotFoundException ex) {
// do your exception handling here
}
或者声明方法(在您的示例中为main
方法)以抛出此异常
public static void main(String[] args) throws ClassNotFoundException {
Class s = Class.forName("java.lang.Thread");
}
答案 1 :(得分:2)
尝试这样
public class ClassDemo {
public static void main(String[] args) {
try {
Class cls = Class.forName("ClassDemo");
// returns the ClassLoader object
ClassLoader cLoader = cls.getClassLoader();
/* returns the Class object associated with the class or interface
with the given string name, using the given classloader. */
Class cls2 = Class.forName("java.lang.Thread", true, cLoader);
// returns the name of the class
System.out.println("Class = " + cls.getName());
System.out.println("Class = " + cls2.getName());
}
catch(ClassNotFoundException ex) {
System.out.println(ex.toString());
}
}
}
答案 2 :(得分:0)
public class ClassObjectTest {
public static void main(String[] args) {
try {
Class<?> s = Class.forName("java.lang.Thread");
System.out.println(s.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
它有效,但你必须尝试捕获。输出生成“java.lang.Thread”。
我希望这对你有所帮助。