Java基础—异常

Java异常处理


1.异常

  • 在Java语言中,将程序执行中发生的不正常情况称为“异常”

2.为什么会有异常处理?

为了避免中断程序的执行流程,Java采用异常处理机制,将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁,并易于维护。

3.异常的体系结构

在这里插入图片描述

异常的根类:Throwable ,其子类有

  • 1)Error: JVM无法解决的严重问题(JVM系统内部错误、资源耗尽等严重情况)

  • 2)Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理

4.异常的分类

1.运行时异常:

  • 是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。

2.编译时异常:

  • 是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求java程序必须捕获或声明所有编译时异常。

分类:

  • 1)运行时异常(非受检异常):RuntimeException

    • NullPointerException
    • ClassCastException
    • ArrayIndexOutOfBoundsException
    • ArithmeticException
    • ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常
  • 2)编译时异常(受检异常):除运行时异常外的所有异常

    • IOException:如 FileNotFoundException
    • ClassNotFoundException:反射Class.forName(全类名)时,全类名不存在

5.为什么会有运行时异常,不用抛出?它如何自己捕获?

1.RuntimeException运行时异常:

  • 能够编译通过的异常( 但运行时会发生异常,会使程序运行终止 )
  • 运行时异常即使没有使用try和catch捕获,JVM自己也能捕获

2.非运行时异常:

  • 在编译的过程中, Java检测到某段代码[可能]会出现怎样的问题, 需要我们对程序进行预处理,如果不处理, 编译就不允许通过;
  • 也就是说,我们必须处理编译时异常,将异常进行捕捉,转化为运行时异常,否则会编译错误

问题:捕获和不捕获异常,程序的运行有什么不同

不捕获异常时的情况:

  • RuntimeException类及其子类,这些类的异常的特点是:
    即使没有使用try和catch捕获,Java自己也能捕获,并且编译通过 ( 但运行时会发生异常使得程序运行终止 )。
  • 如果抛出的异常是IOException等类型的非运行时异常,则必须捕获,否则编译错误。也就是说,我们必须处理编译时异常,将异常进行捕捉,转化为运行时异常

6.受检异常的处理方式

1.try-catch-finally

1)try{…}语句块:选定捕获异常的范围

2)catch(Exceptiontype e) 方法:
1. 友情提示
2. 获取异常信息 e.getMessage() ——返回值 String 类型
3. 获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void e.printStackTrace();

3)finally:最终被执行的区域 不管遇到return/break/continue,其都会执行
用于关闭一些资源

注意:

  • System.exit(0);系统退出时,finally不执行
  • try异常处理代码块,如果异常被catch处理,则程序依旧会继续执行
try{
   
	......	//可能产生异常的代码
}
catc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值