java - 异常处理

异常层次结构


异常概念

[plain]  view plain  copy
  1. 定义  
  2.     程序在运行过程中发生的,打断程序正常执行的事件  
  3. 异常产生的原因  
  4.     硬件错误,资源耗尽,输入错误  
  5. 异常的传播  
  6.     如果没有catch语句捕获异常,异常将调用栈一直向上传播,如果一直没有catch语句块捕获,  
  7.     则最终传播到main方法,最后从main方法抛出,由JVM来处理  

try,catch,finally语句块需要注意事项

[plain]  view plain  copy
  1. try语句块  
  2.     当try语句块中有return语句,先要将finally语句块执行完毕才返回  
  3.     当try语句块中有System.exit(0)语句,当执行完这条语句的时,JVM就停止了,后面都不执行  
  4. catch语句块  
  5.     我们可以使用多个catch块捕获异常,这时需要将父类型的catch块放在子类型catch块之后,  
  6.         否则子类型catch块将无法到达,编译器会报编译错误  
  7. finally语句块  
  8.     可以保证无论抛出异常与否都保证程序继续执行  
  9.     中断finally语句块的执行:  
  10.         finally语句块本身产生异常  
  11.         执行finally语句块线程死亡  
  12.         finally语句块中执行了System.exit(0)  
  13.         计算机断电  
  14.     catch和finally不能同时省略  

Throwable

[plain]  view plain  copy
  1. 是所有异常类的超类  
  2. 有两个直接子类Error和Exception  
  3.     Error  
  4.         错误,程序出现错误我们不能处理  
  5.     Exception  
  6.         异常,程序出现异常我们可以处理  

捕获异常 VS 未捕获异常

[plain]  view plain  copy
  1. 捕获异常  
  2.     是必须处理的异常  
  3.     一般是由外界因素产生的,并且可以恢复的  
  4. 未捕获异常  
  5.     是不用必须处理的异常  
  6.     继承Error代表硬件运行失败导致的严重错误,程序不能处理  
  7.     继承RuntimeException通常是指一些程序运行时错误引起的异常,可以处理也可以不处理  
  8. Exception的子类除去RuntimeException的子类称为捕获异常,其他的都是未捕获异常  

Exception

[plain]  view plain  copy
  1. 重写的方法一定不能抛出新的捕获异常或者比原方法范畴更大的捕获异常  
  2. 分类  
  3.     运行时异常和非运行异常  
  4. 运行时异常,可以不进行处理,推荐不处理  
  5.     继承RuntimeException的类都是运行时异常  
  6. 非运行时异常,必须进行处理,处理有两种方式捕获或者抛出  
  7.     继承Exception但不继承RuntimeException的类都是非运行时异常     
  8.   
  9. Exception类几个能被继承的常用方法  
  10.     public void printStackTrace()   该方法将在控制台打印异常调用栈的信息  
  11.     public String toString()        该方法将返回该异常对象的字符串表示  
  12.     public String getMessage()      返回异常对象中携带的出错信息  

throw VS throws

[plain]  view plain  copy
  1. throw: 方法体中,抛出一个异常对象  
  2. throws: 方法声明时使用,用来指定可能抛出的异常,多个异常可以使用逗号隔开  

自定义异常

[plain]  view plain  copy
  1. 自定义异常必须继承Exception  
  2. 通常情况下,自定义异常编写两个构造器,一个无参的,一个以字符串做参数的构造器  
案例
[java]  view plain  copy
  1. package com.itlwc;  
  2.   
  3. class MyException extends Exception {  
  4.     private static final long serialVersionUID = 1L;  
  5.   
  6.     public MyException() {  
  7.     }  
  8.   
  9.     public MyException(String str) {  
  10.         super(str);  
  11.     }  
  12. }  
  13.   
  14. public class Test {  
  15.     public static void main(String[] args) {  
  16.         int a = 3;  
  17.         try {  
  18.             new Test().getSex(a);  
  19.         } catch (MyException e) {  
  20.             System.out.println("输入性别不合法");  
  21.         }  
  22.   
  23.     }  
  24.   
  25.     public String getSex(int a) throws MyException {  
  26.         if (a == 0) {  
  27.             return "男";  
  28.         } else if (a == 1) {  
  29.             return "女";  
  30.         } else {  
  31.             throw new MyException();  
  32.         }  
  33.     }  
  34. }  
  35. /* 
  36. 打印结果: 
  37.     输入性别不合法 
  38. */  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值