异常是程序中的一些错误,但并非全部的错误都是异常,而且错误有时候是能够避免的。常见的三种异常类型有:java
全部的异常类是从 java.lang.Exception 类继承的子类,Exception类是Throwable 类的子类,以下图所示:数组
常见的非检查性异常有:数组下标越界异常ArrayIndexOutOfBoundsException、空指针异常NullPointerException等,检查性异常有:类未发现异常ClassNotFoundException,表示应用程序试图加载类时,找不到相应的类,NoSuchMethodException表示请求方法不存在等等。指针
捕获异常,以下实例:调试
FileInputStream fis = null; try{ File file = new File("d:\\a.txt"); fis = new FileInputStream(file); }catch(FileNotFoundException e){ e.printStackTrace(); }finally{ try{ fis.close(); //释放资源 }catch(IOException e){ e.printStackTrace(); } }
上面实例中使用的捕获异常的方式是:try/catch 代码块,它的最简单的用法为:code
try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 }
固然,也能够使用多重捕获块,即后面有多个catch块,匹配不一样的异常,finally块属于可选部分,不管是否发生异常,该代码块总会被执行,这里可用来运行清理类型等收尾善后性质的语句,如资源的释放等。继承
若是一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也能够使用 throw 关键字抛出一个异常,仅可应用在方法体中,不管它是新实例化的仍是刚捕获到的。用法以下:资源
//throws用法 public void Fun() throws Exception{ //throw用法 new throw Exception(); }
除了Java中提供的异常类,咱们也能够自定义异常类,须要继承Exception类或者Exception的子类。最简单的自定义异常类以下:字符串
public class FunException extends Exception{}
在类中能够提供一个无参构造方法和一个字符串参数的构造方法,方便输出调试信息。io