------- android培训、java培训、期待与您交流! ----------
为了提高程序的容错性、健壮性,引入异常机制,当程序发生异常时,自动生成异常对象通知程序,成而实现正常代码和错误处理代码的分离,提高可读性。
Java中异常的关键字:
try catch finally throw throws
异常之间的关系:
Throwable
|---Error 错误,与JVM相关的问题,无需catch捕获和throws声明,不能被处理。
|---Exception 异常
|---RuntimeException
|---checked Exception
RuntimeException:运行时异常
运行时异常指示调用方无法处理或恢复的程序错误。
取决于运行状态,编译时不被检测,可以由系统自动抛出,自动捕获,它会直接终止程序。
不需要try,catch和throws exception语句,
运行时异常也可以显示捕获。
如果捕获,程序代码的错误(bug)会被掩盖在运行当中无法被察觉。
常见有除零异常、空指针异常、数组越界异常等。
checked Exception:编译时被检测异常
需要调用方显示捕获处理或者显示声明抛出异常。
catch:
异常捕获:先捕获小异常,再捕获大异常。
Java7的多异常捕获:
catch(Exception1|Exception2 e) {... } 各异常类型之间用|分开,e默认被final修饰.
异常的几种处理方式:
1、通过catch处理异常,并进行修复,然后继续执行程序;
2、catch后重新抛出新异常,交给上层调用者;
3、不捕捉异常。直接使用throws声明抛出。
捕获的异常赋给catch后的形参,该异常对象的方法有:
getMessage():返回异常的描述字符串
printStackTrace():错误栈信息输出到标准输出
printStackTrace(PrintStream ps):错误栈信息输出到指定输出流
getStackTrace():返回栈信息,数组
finally代码块:
用于关闭资源。
当遇到return或者throw 语句时,方法返回前会先执行finally中的代码;
如果catch代码块中有System.exit(1);语句,则finally代码块将不被执行。
如果需要定义必须执行的代码,可以使用try。。。finally。。语句,将代码放在finally块中。
Java7 自动关闭资源的try语句
try(定义资源或者初始化资源){。。。。}
这些资源必须实现Closeable或者AutoCloseable接口;
隐式包含用于关闭资源的finally块,可以不需要catch块和finally块。
throw语句
单独存在时,后面不可以跟语句,因为执行不到。
自定义异常:需要继承Exception或者RuntimeException
throws抛出异常
子类方法抛出的异常应该是父类方法抛出的异常的子类或者相同,子类方法不能比父类方法抛出更多的异常。
举例:如在多态时,早期的程序不能处理后来出现的新异常。
------- android培训、java培训、期待与您交流! ----------