目录
一.为什么需要异常
异常机制是一门成熟语言的标准,异常机制可以使得程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅和更加健壮。
二.异常的分类和继承关系
1.Java中的异常有两种,即编译时和运行时异常。编译时异常是在编译时就要被处理的异常,提醒程序员需要处理编译时就可能遇到的异常。而运行时异常则无需处理。
2.常见异常继承关系:
我们可以看到Error(错误)和Exception(异常)都继承自Throwable这个接口,Error一般与虚拟机相关,我们无法恢复或不可能捕获,当程序发生错误时,程序则发生奔溃中断。
三.异常的处理和自定义异常
Java中的异常处理,主要是由5个关键字处理,即try catch finally throws throw;简单的讲一讲各个关键字的作用:try后面跟着{},{}里面的代码块是可能发生异常的代码,后面一般会跟着catch(异常类型){},也有可能有多个catch,finally一般是跟在catch后面的,如果有finally这个关键字,那finally这个关键字后面的代码块总是被执行,需要注意的是除了try块,catch finllay块都不是必须的,但至少有其中之一。throws 是在方法签名时声明该方法可能会抛出一个异常,throw后面则是跟着具体的异常对象;
1.一般处理
try{
// 程序代码
}catch(ExceptionName e1){
//Catch 块
}
2.多重捕获
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}
有个点注意下:多重捕获是要么多个异常类型没有继承关系,如果有先捕获子类型,再捕获父类型。
3.带finally的异常处理
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}fially{
//一般是释放资源
}
4.访问异常信息
如果捕获到异常则在cath块中有几个常用的方法提供给我们:
1.getMessage();返回异常的详细字符串;
2.printStackTrace();将异常的跟踪栈信息输出到标准输出;
3.printStackTrace(PrintStream S);将异常的跟踪栈信息输出到指定输出流中;
4.printStackTrace(PrintStream S);返回该异常的跟踪栈信息。
try{
// 程序代码
}catch(ExceptionName e1){
//Catch 块
e1.printStackTrace();
}
5.throws throw关键字的使用
权限符 返回值 方法名() throws ExceptionName
{
// Method implementation
throw new ExceptionName ();
}
throws有几个点注意下:
1只能在构造方法、方法中使用;
2.谁调用谁处理;
3.抛出的异常可能是多个,用,隔开。
6.自定义异常
所有异常都必须是 Throwable 的子类。
如果希望写一个检查性异常类,则需要继承 Exception 类。
如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
7.可能会遇到的面试总结
参考博客https://blog.csdn.net/android_seven/article/details/82499337
本文如果不正之处。欢迎大家批评指正。