我们可以将一个Exception Class对象分配给Object类对象的引用

时间:2010-08-05 12:56:21

标签: java class object

为什么这不起作用,任何人都能为这一个给出确切的答案....

public class Manager
{
     public static void main(String args[])
     {
         try{

                 Object obj=new A();   //it will generate ClassNotFoundException object
                 System.out.println("currently the reference obj is pointer to the object:"+obj);

            }catch(Object o)
                  {
                      System.out.println(o);
                  }

        }

     System.out.println("End of Main");
}       

2 个答案:

答案 0 :(得分:7)

这不会起作用,因为“catch”语句中声明的变量必须是异常类型(即Throwable或子类型)。

来自Java语言规范的section 14.20

  

catch子句必须只有一个   参数(称为   例外参数);声明的   必须包含异常参数的类型   是Throwable类或子类   (不仅仅是一个子类型)的Throwable,或者   发生编译时错误   特别是,它是一个编译时错误   如果是声明的异常类型   参数是一个类型变量(§4.4)。   参数变量的范围是   捕获条款的块。

当然你可以写:

catch(Throwable t)
{
    Object o = t;
    System.out.println(o);
}

目前尚不清楚你为什么要这么做。

答案 1 :(得分:0)

你对A类的构造函数一无所知......它实际上是在抛出异常吗? 如果是,那么其他答案应该可以帮到你。 如果不是,那么也许我可能会记得 instanciating 异常不是抛出异常......

示例:

这不起作用:

try {
 new Exception();
} catch (Exception e) {
 System.out.println("This will never be printed...");
}

但是,您可以通过添加throw关键字来获得预期结果:

try {
 throw new Exception();
} catch (Exception e) {
 System.out.println("This will actually be printed...");
}