Java学习路线-10:异常

举报
彭世瑜 发表于 2021/08/14 01:40:37 2021/08/14
【摘要】 第27 章 : 异常的捕获及处理 116 认识异常对程序的影响 出现错误后,程序中断执行 为了保证程序出现非致命错误之后,程序依然可以正常完成 异常处理机制保证程序的顺利执行 117 处理异常 语法 try{ } catch(异常类型 异常对象){ // 处理异常 } catch(异常类型 异常对象){ // 处理异常 } ... finally{ // ...

第27 章 : 异常的捕获及处理

116 认识异常对程序的影响

出现错误后,程序中断执行
为了保证程序出现非致命错误之后,程序依然可以正常完成
异常处理机制保证程序的顺利执行

117 处理异常

语法

try{

} catch(异常类型 异常对象){ // 处理异常

} catch(异常类型 异常对象){ // 处理异常
}
...
finally{ // 不管是否出现异常都会执行
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

异常

System.out.println(2/0);
// java.lang.ArithmeticException: / by zero

  
 
  • 1
  • 2

异常捕获

try{ System.out.println(2/0);
}
catch(ArithmeticException e){ System.out.println(e); // java.lang.ArithmeticException: / by zero
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

打印完成的异常信息
printStackTrace()

try{ System.out.println(2/0);
}
catch(ArithmeticException e){ e.printStackTrace(); // java.lang.ArithmeticException: / by zero // at Demo.main(Demo.java:4)
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

118 处理多个异常

如果明确知道会发生什么异常,可以使用if做判断

119 异常处理流程

Error 程序还未执行性出现的错误,开发者无法处理
Exception 程序中出现的异常,开发者可以处理

异常体系

Object -Throwable -Exception

  
 
  • 1
  • 2
  • 3

所有异常都可以用 Exception 处理
捕获范围大的异常要放在最后

120 throws关键字

告诉调用者可能会出现的异常
如果主方法继续抛出异常,表示此异常交由JVM处理


class Demo{ public static int div(int x, int y) throws ArithmeticException{ return x / y; } public static void main(String[] args) { try{ int x = div(1, 0) ; }catch(ArithmeticException e){ e.printStackTrace(); } }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

121 throw关键字

手动抛出异常

try{ throw new Exception("主动抛出异常");
}catch(Exception e){ e.printStackTrace(); // java.lang.Exception: 主动抛出异常
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

区别:throw & throws
throw 在代码块中使用,主动抛出异常对象
throws 在方法定义上使用,明确告诉调用者可能产生的异常

122 异常处理模型

try{ result = x / y;
} catch(Exception e){ throw e;
}finally{ System.out.println("结束...");
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

简化写法

try{ result = x / y;
} finally{ System.out.println("结束...");
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

123 RuntimeException

函数定义标注了可能抛出的异常,不过并没有要求强制处理

区别 RuntimeException & Exception
RuntimeException 是 Exception子类
RuntimeException 子类不要求强制处理异常
Exception 必须处理

124 自定义异常类

继承 RuntimeException(可选处理),Exception(必须处理)

// 如果继承自Exception 
// 错误: 未报告的异常错误MyException; 必须对其进行捕获或声明以便抛出
class MyException extends RuntimeException{ public MyException(String message){ super(message); }
}

class Demo{ public static void main(String[] args) { throw new  MyException("自定义异常"); // Exception in thread "main" MyException: 自定义异常 }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

125 assert断言

JDK >= 1.4
确定代码执行到某行之后,一定是所期待的结果
不一定是准确的,也可能出现偏差,但是这种偏差不应该影响程序的正常执行

Java中的断言需要指定运行参数才生效

int x = 9 ;
assert x == 10;

  
 
  • 1
  • 2

编译运行没有任何结果

启用断言

java -ea Demo

  
 
  • 1

程序抛出异常

Exception in thread "main" java.lang.AssertionError

  
 
  • 1

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/102888513

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。