forName方法的编译错误

时间:2015-05-06 13:01:37

标签: java class

为什么下面的代码片段会产生编译时错误?编译器显示“未处理的异常类型ClassNotFoundException”。

 public class ClassObjectTest {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Class s=Class.forName("java.lang.Thread");
        }
    }

3 个答案:

答案 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”。

我希望这对你有所帮助。