异常类Object的类型为Checked或Unchecked

时间:2015-04-22 03:44:08

标签: java exception-handling

import java.io.*;
class a {
    public static void main(String [] args) {
        try {
            new a().go();
        }
        catch(Exception e) {
            System.out.println("catch");
        }   
    }

    void go() {}
}

Already visited this link but didn't got my answer

  • 如果考虑Exception类对象Checked:即使从go方法永远不会抛出异常对象,此代码编译也很好。确切地说,可以处理从try块抛出的已检查异常,而不处理其他异常。所以无法检查。

  • 如果将Exception类对象视为UnChecked:Exception类不是Error或RuntimeException的子类,因此无法取消选中它。

请帮助我理解......这是一个类型的对象。

5 个答案:

答案 0 :(得分:2)

RuntimeException是Exception的子类,因此catch块会选择已检查和未检查的异常。

答案 1 :(得分:1)

点击此链接http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html

类Exception和任何不属于RuntimeException子类的子类都是已检查的异常

所以要回答你的问题,这是一个经过检查的例外。

答案 2 :(得分:1)

Exception is a checked exception.这更像是一种排斥;它既不是Error也不是RuntimeException,它们都被认为是未经检查的。

  

未经检查的异常类是运行时异常类和错误类。

     

已检查的异常类是除未经检查的异常类之外的所有异常类。也就是说,已检查的异常类是除Throwable以外的RuntimeException及其子类和Error及其子类的所有子类。

也就是说,你的设计示例仍然会编译,因为Exception是所有运行时异常的超类,这些(由于某种原因)预计将被捕获到您的代码块中。由于您没有声明Exceptiongo声明,因此您不是必需来捕获它,因为它不是经过检查的例外。

不要在生产中使用这样的代码,因为任何已检查的异常或运行时异常将被该块捕获。

答案 3 :(得分:1)

  
      
  • 如果将Exception类对象视为已检查
  •   

是。

  

即使Ex方法对象永远不会从go方法抛出,此代码编译也很好。

你无法知道。可能有RuntimeException.

  

确实可以处理从try块抛出的已检查异常,而不处理其他异常。

这不正确。已捕获的异常将捕获运行时异常。

  

因此无法检查。

虚假前提下的无效扣除。

  
      
  • 如果Exception类对象被视为UnChecked
  •   

检查。无需考虑其余部分。

  

异常类不是Error或RuntimeException的子类,因此无法取消选中它。

正确。

答案 4 :(得分:0)

异常类本身不是一个已检查过的Exception ..Checked Exceptions是异常类的子异常类e-g IOException等 有两件事。
1-你在扔它吗? 2-你是在谈论在catch条款中声明它。??

让我们通过示例演示

1-如果你要抛出任何Exception类Except(RuntimeException或其子类),那么你必须通过catch子句处理它或者通过throws声明它。无论它是Exception类还是Throwable或其他Checked Exceptions。例如

void go() throws Exception
{ 
throw new Exception();
} //you have to handle or declare it

现在调用方法应该处理或声明它

2-你的观点在这里你是在谈论在catch子句中声明它。 (例外与其他检查例外情况)
如果在catch中声明,则不需要抛出异常但是如果被捕获则需要抛出异常..(简单的答案就是这样)

void callingMethod()
{
  try{ } // NO NEED TO THROW Exception OR Thowable
  catch(Exception e){ 
      e.printStakeTrace(); 
  }
}

//如果出现异常的孩子,如果你正在抓住它,那么你就必须通过它>>否则编译器会告诉你通过它e-g

void callingMethod()
{
  try{ } // here is compiler error..it says you have to through it
  catch(IOException e){ 
      e.printStakeTrace(); 
  }
}