java018:java中异常的处理和恢复

一,Try catch语句处理异常
格式:

Try{带异常的语句}
catch(异常类型)
{输出}

案例1:
说明捕获到异常后,try异常后面的程序不会再输出,直接转catch语句,再运行完整个程序

在这里插入图片描述
2,打印异常堆栈轨迹和出错的行号
在这里插入图片描述
3,父类异常和子类异常的位置关系

在这里插入图片描述
二,Try—catch—finally语句
格式:他们三个的关系就像是丈夫(try),妻子(catch)和小三(finally)。丈夫和妻子可以出现在一起,丈夫和小三可以出现在一起,但是小三和妻子是不能在一起的
###finally具有强权性,无论语句如何,它都是要输出的

Try{错误语句
}catch(错误类型){输出}
finally{输出}

案例:
在这里插入图片描述
异常覆盖:
在这里插入图片描述
三,手动引发异常:(本来没有异常,却给他抛出个异常)
案例:

在这里插入图片描述
作用:当用户输入非法数据时,停止程序运行,并提示用户数据非法
案例:

public class Test1 {
   public static void f1(int age){
    if(age>0&&age<=140){
     System.out.println("我今年"+age+"岁");
    }else{
     throw new RuntimeException("年龄不合法");
    }
   }
 public static void main(String[] args) {
  f1(20);
 
 }
}

运行结果:
年龄合法
在这里插入图片描述
年龄不合法:
在这里插入图片描述
异常的转移:
每一个方法都默认具有抛出运行时异常(runtimeException)和错误(Error)的潜能
当多个方法调用时,内层方法出现异常,会逐级向外层调用这个方法的方法转移,直到转到main函数,把错误抛给虚拟机,由虚拟机抛出异常

在这里插入图片描述
四,检查性异常和运行时异常的区别:
常见的检查性异常
FileNotFoundException:文件找不到异常
ClassNotFoundException:类找不到异常
IOException:数据流异常
运行时异常:一般当你参数传错的时候就用运行时异常,编译可以通过
检查性异常:比如QQ断网的时候,它会先检查自身程序,然后告诉你,程序没错,是你网络的问题。编译不能通过
如果抛出检查性异常:检查性异常需要就地处理,捕获后流程继续,错误的数据继续运行,如果将异常抛出,一直抛到main函数,再到虚拟机,虚拟机容易出错。
五,自定义异常:
系统已经帮我们内置好了很多很多的异常,但是有些异常系统没有定义,如果用系统内置的异常类型,则异常过于笼统,所以我们需要自定义异常
方法:
1,写一个自定义异常类
2,继承runtimeException(运行异常),Error(错误),Exception(异常)中的一个
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44699728/article/details/89470157
今日推荐