Java进阶篇3——异常

一、异常的知识

1. 所有的异常类都是从 java.lang.Exception 类继承的子类

在这里插入图片描述

2. 解释各部分含义

在这里插入图片描述

3. 理解错误与异常

  • Java 程序通常不捕获错误。
  • 区别,例子:
- 错误:比如说,你的代码少了一个分号,
那么运行出来结果是提示是错误 java.lang.Error;

- 异常:如果你用System.out.println(11/0),
那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException 的异常。

4. 异常如何工作?

  • 检查性异常:
- 最具代表的检查性异常是:用户错误或问题引起的异常,这是程序员无法预见的。
- 例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常:
- 运行时异常是可能被程序员避免的异常。
- 与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误:
- 错误不是异常,而是脱离程序员控制的问题。
- 错误在代码中通常被忽略。
- 例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

5. 捕获异常

5.1 模板

try{
   
   // 程序代码
}catch(异常类型1 异常的变量名1){
   
  // 程序代码
}catch(异常类型2 异常的变量名2){
   
  // 程序代码
}catch(异常类型3 异常的变量名3){
   
  // 程序代码
}finally{
   
  // 程序代码
}

5.2 解释为什么这样写

  • 一个 try 代码块后面可以跟随多个 catch 代码块。
  • 处理原理
如果保护代码中发生异常,异常被抛给第一个 catch 块。

如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。

如果不匹配,它会被传递给第二个 catch 块。

如此,直到异常被捕获或者通过所有的 catch 块。
  • 无论是否发生异常,finally 代码块中的代码总会被执行。
  • 只能有一个或没有finally代码块。

6. 抛出异常

  • throw 关键字:
- 什么是 throw:
throw 语句用来直接拋出一个异常

- throw 用法:
throw ExceptionObject;
ExceptionObject 必须是 Throwable 类或其子类的对象。
如果是自定义异常类,也必须是 Throwable 的直接或间接子类。

- throw 抛出异常的过程:
1.throw 语句执行时,它后面的语句将不执行。
2. 此时程序转向调用者程序,寻找与之相匹配的 catch 语句,执行相应的异常处理程序。
3. 如果没有找到相匹配的 catch 语句,则再转向上一层的调用程序。
4. 这样逐层向上,直到最外层的异常处理程序终止程序并打印出调用栈情况。

7. 声明异常

  • throws 关键字:
- 什么是 throws:
声明异常

- 何时用 throws:
当一个方法产生一个它不处理的异常时,那么就需要在该方法的头部声明这个异常,
以便将该异常传递到方法的外部进行处理。

- throws 声明抛出异常的思路:
1. 使用 throws 声明的方法表示此方法不处理异常。
2. 异常应该由向上一级的调用者处理。(加入是 main 方法来调度)
3. 如果 main 方法也不知道如何处理这种类型的异常。
4. 那么 main 方法也可以使用 throws 声明抛出异常,该异常将交给 JVM 处理。
5. JVM 对异常的处理方法是,打印异常的跟踪栈信息,并中止程序运行。

- 当一个方法想声明多个异常:
如果有多个异常类,它们之间用逗号分隔。
例如:returnType method_name(paramList) throws Exception 1,Exception2,{
   }

8. throw 和 throws

  • 它们有何关系:
- throwthrows 的关系:
1. 可以通过 throws 关键字在方法上声明该方法要拋出的异常,
2. 然后在方法内部通过 <
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜满月

鼓励,鼓励,更加努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值