Java异常处理

1. 异常分类

  

  Java中所有的异常类都派生于Throwable类,Throwable类有子类Error和Exception类。其中Error表示Java运行时系统的内部错误,Exception表示程序运行异常。Exception的子类又分为两大类:RuntimeException类和其他异常类,RuntimeException表示程序的逻辑错误,如:NullPointerException;其他异常表示外部异常条件引起的错误,如:IOException。

  Java将异常分为已检查异常和未检查异常,未检查异常包括Error和RuntimeException,已检查异常包括其他Exception。未检查异常表示该种错误要么无法由程序员控制(Error),要么程序员完全应该避免(RuntimeException)。而已检查异常表示由外部条件引发的错误,Java的异常处理机制主要是为了处理已检查异常。

2. 覆盖与异常

  子类想要覆盖父类中的一个方法,如果父类中该方法没有抛出异常,则子类中的新方法也不能抛出异常;如果父类中该方法抛出异常,则子类中可以不抛出异常,若抛出异常,则要求子类中方法抛出的异常范围不超过父类中方法抛出的异常。

3.finally子句

  finally子句表示不管try块中是否发生异常,都会执行finally块中的代码。finally通常用来释放程序中需要手动释放的资源,如:关闭文件,关闭数据库连接等。例:

try
{
  try
  {
     input.read(.....); 
return 1; }
finally { input.close();
return 2; } }
catch(IOException e) { e.printStackTrace(); }

  需要注意的是,上面的例子中,里面的try语句只有finally子句,实际上这是合法并且推荐的方式,表示该try语句的目的就是为了释放资源,并且,很多情况下,finally子句中的代码有可能会抛出异常。

  假设try语句中包含return语句,而finally子句中也包含return语句,则finally中的return语句会覆盖try语句中的返回值。

参考资料 《Java核心技术》  

原文地址:https://www.cnblogs.com/jqctop1/p/4690919.html