Java基础 ---Throwable异常类

举报
ksh1998 发表于 2021/12/25 23:03:05 2021/12/25
【摘要】   前言:    相信很多小伙伴在其他语言里都是用过异常处理和抛出过异常比如:VB里抛出异常使用Throw "异常提示"这种方式来抛出异常吗,C#直接声明异常throw new Excption("异常提示信息")。这两种抛出异常的方法,一种是过程化的而另一种是面向对象的思想。但是这两种思想捕获异常的方式...

 

前言:
   相信很多小伙伴在其他语言里都是用过异常处理和抛出过异常比如:VB里抛出异常使用Throw "异常提示"这种方式来抛出异常吗,C#直接声明异常throw new Excption("异常提示信息")。这两种抛出异常的方法,一种是过程化的而另一种是面向对象的思想。但是这两种思想捕获异常的方式是一样的。

Try{

}catch(){

}

基本上都是这个格式,只是在使用的时候细节上会与点小差距。今天介绍java的异常处理,从根上介绍。从Exception的父类开始介绍,还有一个我们不能处理的异常Error这个是错误。错误是程序员不能自己处理的,只能交给jvm虚拟机处理。

目录

Throwable体系

Error

Exception

异常分类

编译期异常

运行时异常

Throwable常用方法

public void printStackTrace() :

解释:

代码:

public String getMessage() :

解释:

代码:

public String toString() :

解释:

代码:

异常处理方法

抛出

捕获

处理方法

try catch

调用者再次抛出


Throwable体系

Error

Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。

Exception

Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好 比感冒、阑尾炎。

异常分类

编译期异常

:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)

运行时异常

runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异 常)

Throwable常用方法

public void printStackTrace() :

解释:

打印异常的详细信息。 包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace。

代码:


  
  1. try {
  2. Date date= sdf.parse("1998-0428");
  3. } catch (ParseException e) {
  4. e.printStackTrace();
  5. }

public String getMessage() :

解释:

获取发生异常的原因。 提示给用户的时候,就提示错误原因。

代码:


  
  1. try {
  2. Date date= sdf.parse("1998-0428");
  3. } catch (ParseException e) {
  4. e.getMessage();
  5. }

public String toString() :

解释:

获取异常的类型和异常描述信息(不用)。

代码:


  
  1. try {
  2. Date date= sdf.parse("1998-0428");
  3. } catch (ParseException e) {
  4. e.toString();
  5. }

异常处理方法

         在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方 法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的 数据进来。这时需要使用抛出异常的方式来告诉调用者。 在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。

那么,抛出一个异常具体如何操作呢?

1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。

2. 需要将这个异常对象告知给调用者。

怎么告知呢?

怎么将这个异常对象传递到调用者处呢?

通过关键字throw 就可以完成。

throw 异常对象。

throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

抛出

格式

throw new 异常类名(参数);

例如:


  
  1. throw new NullPointerException("要访问的arr数组不存在");
  2. throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");

示例


  
  1. public class ThrowDemo {
  2. public static void main(String[] args) {
  3. //创建一个数组
  4. int[] arr = {2,4,52,2};
  5. //根据索引找对应的元素
  6. int index = 4;
  7. int element = getElement(arr, index);
  8. System.out.println(element);
  9. System.out.println("over");
  10. }
  11. /*
  12. * 根据 索引找到数组中对应的元素
  13. */
  14. public static int getElement(int[] arr,int index){
  15. //判断 索引是否越界
  16. if(index<0 || index>arr.length‐1){
  17. /*
  18. 判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。
  19. 这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。
  20. */
  21. throw new ArrayIndexOutOfBoundsException("哥们,角标越界了~~~");
  22. }
  23. int element = arr[index];
  24. return element;
  25. }
  26. }

捕获

上面是直接把声明的对象抛出,下面演示如何处理抛出的异常。(上面的这种方式不处理异常,程序会直接崩溃。)所以只要抛出异常 调用者必须处理。

处理方法

try catch


  
  1. public class TryCatchDemo4 {
  2. public static void main(String[] args) {
  3. try {
  4. read("a.txt");
  5. } catch (FileNotFoundException e) {
  6. //抓取到的是编译期异常 抛出去的是运行期
  7. throw new RuntimeException(e);
  8. } finally {
  9. System.out.println("不管程序怎样,这里都将会被执行。");
  10. }
  11. System.out.println("over");
  12. }
  13. /*
  14. *
  15. * 我们 当前的这个方法中 有异常 有编译期异常
  16. */
  17. public static void read(String path) throws FileNotFoundException {
  18. if (!path.equals("a.txt")) {//如果不是 a.txt这个文件
  19. // 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw
  20. throw new FileNotFoundException("文件不存在");
  21. }
  22. }
  23. }

调用者再次抛出

这个是异常不在内部处理,抛出给调用者。(调用者如果是main方法的话还可以再次抛出,这次抛出是直接抛给JVM虚拟机处理)


  
  1. //判断当前注册账号是否存在
  2. //因为是编译期异常,又想调用者去处理 所以声明该异常
  3. public static boolean checkUsername(String uname) throws LoginException{
  4. for (String name : names) {
  5. if(name.equals(uname)){//如果名字在这里面 就抛出登陆异常
  6. throw new RegisterException("亲"+name+"已经被注册了!");
  7. }
  8. }
  9. return true;
  10. }

 

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

原文链接:kangshihang.blog.csdn.net/article/details/110525808

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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