异常-Exception(待补充)

异常-Exception(待补充),第1张

异常-Exception(待补充)

先看代码

public static void main(String[] args) {
        int a = 10;
        int b = 0;
        System.out.println(a/b);
        System.out.println("程序继续执行");
    }

产生错误:Exception in thread "main" java.lang.ArithmeticException: / by zero 会直接在System.out.println(a/b);这里停止程序而不运行剩余的程序,也就是 不会输出程序继续执行这句话,为什么呢?因为a/b(除数不能是0)已经出现了异常(先知道有这个东西) 如何能够让程序继续执行后面的程序而不在a/b这里结束呢? 我们可以使用异常处理来解决这个问题

异常的基本概念

java 语言中,将程序执行中发生的不正常情况称为"异常"。(开发过程中的语法错误和逻辑错误不是异常)

执行中的异常事件可以分为两大类:

  1. Error(错误):java 虚拟机无法解决的严重性问题。 如:JVM系统内部错误、资源耗尽等严重情况 Error是严重错误,程序会直接崩盘

    StackOverflowError[栈溢出]
    outofmemory[堆溢出] 也可写作简称OOM  

  2. Exception:其他因为编程错误或者是偶然的外在因素导致的一些问题,可以使用针对性的代码进行处理。 如:空指针访问,试图读取已经不存在的文件,网络连接中断等 Exception可以分成两大类:运行时异常[程序运行过程中的异常],和编译时期的异常[编程时,编译器检查出的异常,必须经过异常处理才可以过编译]

异常的体系图

Exception总结

1.异常分为两大类,运行时异常和编译时异常 2.运行时异常,只能在运行过程中发现异常,一般是指编程是的逻辑异常,是程序员应该避免出现的异常。java.lang.RuntimeException 类以及它的子类都是运行时异常 3.编译时异常,是在编译时期必须解决的异常

常见的运行时异常:
1. NullPointerException 空指针异常
2. ArithmeticException 数学运算异常 比如:除数为0
3. ArrayIndexOutOfBoundsException 数组下标越界异常
4. ClassCastException 类型转换异常 
5. NumberFormatException 数字格式不正确异常 比如:Integer转换时,字符串中不全是数字
编译时异常是指在编译期,就必须处理的异常,否则代码不能通过

常见的编译异常
待补充

 

异常处理
  1. 异常处理就是当异常发生时,对异常处理的方式

异常处理的方式: (1). try-catch-finally异常处理 程序员在代码中捕获发生的异常,自行处理

try-catch-finally 处理机制
try{
可能有异常的代码
}catch(Exception e){

}finally{

}

try-catch()-catch()-... 
    可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch
    
可以直接使用try-finally,这种相当于不捕获异常,程序会直接崩掉或者退出

try-catch-finally方式处理异常的细节
1.如果try中的某个代码发生了异常,异常后面的代码不会执行,直接会转到catch块中
2.如果try中的代码没有异常,则不会执行catch中的代码
3.finally是无论如何都会执行

(2). throws异常处理
将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM
如果在一个方法中可能产生某种异常,但不能确定是何种异常,则可以通过此方法显示地声明抛出异常,表明该方法不对这些异常处理,而由该方法的调用者负责处理
在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中的异常类型,也可以是他的父类

throws的细节
1.对于运行时异常,程序中如果没有处理,默认throws的方式处理
2.子类重写父类的方法是,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型
3.在throws过程中,如果有方法try-catch,就相当于与处理异常,就不必throws

 

自定义异常

当程序中出现了某些不是Throwable子类中描述处理,我们可以自己设计异常类,用于描述该类异常信息

自定义异常的步骤
1.定义类:继承Exception或RuntimeException
2.如果继承Exception,属于编译异常
3.如果击沉RuntimeException,属于运行异常
throws和throw的区别 意义位置后面的内容throws异常处理的一种方式方法声明处异常类型throw手动生成异常对象的关键字方法体中异常对象

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5638165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存