异常处理(笔记)

本文介绍了Java中的异常处理机制,包括异常的概念,异常的层次结构,如Exception和Error的区别,以及运行时异常和非运行时异常。详细讲解了如何使用try-catch-finally处理异常,强调了finally块在资源清理中的重要性,并提到了return和System.exit()对异常处理的影响。此外,还讨论了自定义异常的创建和使用。
摘要由CSDN通过智能技术生成

目录

1、掌握异常的概念

2、熟悉异常结构及常见运行时异常

3、掌握异常的处理-捕获异常try、catch和finally

4、掌握异常的处理-层层抛出

5、了解finally与return和System类的exit方法

6、掌握自定义异常


1、掌握异常的概念

  • 异常(Exception):异常指的是程序运行时发生的不正常事件;异常能够被程序处理,保证程序继续运行下去;例如除数为0、文件没有找到、输入的数字格式不对……
  • 错误(Error):错误程序没法处理,例如内存泄漏。发生错误后,一般虚拟机会选择终止程序运行,程序员需要修改代码才能解决相关错误;

2、熟悉异常结构及常见运行时异常

异常层次关系:

  • API中标准异常的顶级父类是Throwable类;
  • Throwable类有两个子类:Exception和Error;所有异常都是Exception类的直接或间接子类;所有错误都是Error的直接或间接子类;

  • Exception有很多子类;这些子类又可以分为两大类;
  • 即运行时异常和非运行时异常;RuntimeException的子类都是运行时异常,其他的都是非运行时异常;

  • 运行时异常:也称为非检测异常(unchecked Exception), 这些异常在编译期不检测,程序中可以选择处理,也可以不处理。如果不处理运行时会中断,但是编译没问题;
  • 非运行时异常:也称为检测异常(checked Exception), 是必须进行处理的异常,如果不处理,将发生编译期错误;

示例:

  • String s="";
    System.out.println(s.length());
    
    输出结果是:0
  • String s=null;
    System.out.println(s.length());
    
    运行会报空指针异常

3、掌握异常的处理-捕获异常try、catch和finally

idea中提供了创建try...catch...finally的快捷键,你可以选中需要放入try{}中的语句,按Ctrl+Alt+t

(你会惊喜的发现,if...else也可以使用同样的方法添加)

程序一但出现异常就会中断运行

格式:

  • 当try块中中代码抛出了异常对象后,异常处理机制就将这个对象的类型与try后的catch语句中的异常类型进行匹配,如果类型相同,或者抛出的是捕获的子类,就称为匹配成功,那么异常就被捕获,就运行catch块中的语句;否则,称为异常没有被捕获,程序将中断; 

  • 抛出异常,但是没有被处理        示例:

  • 抛出异常,但是没有被处理        示例:

  • 没有抛出异常        示例:

catch语句里都写什么代码?

  • 可以写任意需要对异常进行处理的代码;
  • 可以调用异常对象的方法,例如printStackTrace,查看异常发生的栈轨迹

  • 如果try块中有多行代码,有可能抛出多种类型异常,那么可以使用多个catch语句;
  • 注意:catch语句的异常类型必须从子类到父类的顺序,否则编译错误;

示例;

我们可以发现程序中有这样几种情况:

  • 没抛出异常;
  • 抛出异常并被处理了;
  • 抛出异常没有被处理; 

如果希望不管什么情况,有一些代码都必须被执行,那么就可以把这些代码写到finally块中;

一般用于资源的清理和释放工作。如:关闭已打开的文件、删除临时文件、释放数据库连接

 注意:

  • 必须有try,catch可以有1个或多个,finally最多1个,可以没有,不能有多个;
  • 还有另外一种组合:只有try和finally,没有catch

  •  如果try块中抛出了异常,则肯定不能被捕获,程序中断,但是finally代码块依然会被执行;

4、掌握异常的处理-层层抛出

抛出异常其实就是创建了一个异常对象,然后用throw关键字交给异常处理机制去处理

throws用在方法声明处,声明该方法可能发生的异常类型;

  

5、了解finally与return和System类的exit方法

  • 在try中没有异常的情况下try、catch、finally的执行顺序 try --- finally

       如果try中有异常,执行顺序是try --- catch --- finally

  • 如果try中没有异常并且try中有return这时候正常执行顺序是try ---- finally --- return

       如果try中有异常并且try中有return这时候正常执行顺序是try----catch---finally--- return

  • 如果try有异常,相应catch中有return,顺序是try---catch---finally---return

       总之 finally 永远执行!除非前面有System.exit(0)退出虚拟机

       System.exit(参数);             参数: 0 或 1    都代表退出虚拟机 

6、掌握自定义异常

  • 如果抛出的是API中的标准异常,那么很可能与API中方法抛出的异常混淆,因此需要自定义异常;
  • 自定义异常类非常简单,只要继承API中任意一个标准异常类即可;
  • 多数情况下,继承Exception类;也可以选择继承其他类型异常;
  • 一般自定义异常类中不写其他方法,只重载必要的构造方法;

  •  使用自定义异常与使用API中标准异常一样;
  • 可以用throw抛出自定义异常对象,使用throws声明自定义异常类型;
  • 可以使用try/catch/finally处理异常;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值