isInstance中的ClassNotFoundException

时间:2017-06-01 06:35:27

标签: java class exception

class j {
public static void main(String args[])
    {
        Object obj=new Object();
        String c ="Object";
        System.out.println(Class.forName(c).isInstance(obj));
    }
}

在上面的代码中我试图找出obj是否是Object的实例。我应该得到答案为真,但我得到一个错误。我无法弄清楚为什么错误正在发生。任何人都可以帮帮我吗?

error: unreported exception ClassNotFoundException; must be caught or 
declared to be thrown
    System.out.println(Class.forName(c).isInstance(obj));

3 个答案:

答案 0 :(得分:2)

你必须在try catch中包围代码,否则你必须确保main可以抛出异常:

try {
  System.out.println(Class.forName(c).isInstance(obj));
} catch(ClassNotFoundException ex) {
  // do something in case class can not be found
}

public static void main(String args[]) throws ClassNotFoundException

在没有任何安全网的情况下,你不能留下能够抛出异常的代码。

确保使用类的完全限定名称:

java.lang.ClassNotFoundException 

或在源代码的开头导入它:

import java.lang.ClassNotFoundException;

答案 1 :(得分:2)

2件事:

  1. 方法 forName 会引发异常,因此您需要捕获它们或重新抛出它。

  2. 只是做Class.forName("Object")不正确,您需要使用所需类的完全限定名称(即包含包)

  3. 来自javaDoc

      

    参数:className - 所需类的完全限定名称。

    String c = "java.lang.Object";
    System.out.println(Class.forName(c).isInstance(obj));
    

答案 2 :(得分:1)

方法Class.forName声明它抛出Exception ClassNotFoundException ,因此在您的代码中,您需要捕获它或声明在方法声明中抛出ClassNotFoundException 。因此

Public static void main(String[] args) throws ClassNotFoundException {

try {
        System.out.println(Class.forName(c).isInstance(obj));
} catch (ClassNotFoundException ex) {
  System.out.println(ex.getMessage());
}