2022/7/29 第七组陈美娜 异常
作者:互联网
异常
-
抛出异常的程序后面不会执行。和retuen的作用对等
-
如果抛异常的情况,还想输出后面的话
第一种,用if判断出特殊情况
第二种:try{}catch(),还帮你直接解决异常的地方,还有捕捉
如果知道某个条件可能会抛异常,但是不知道抛出哪些具体的异常时,用关键字try{
}catch(),异常的数据类型参数名
throw是抛出异常,不想解决抛给第二个类
e.printStackTrace(),输出异常在哪里
顶级异常:throwable
catch能抓多个异常,从小范围到大范围【ch08】
Error和Exception区分:
Error是编译时错误和系统错误,系统错误在除特殊情况下,都不需要你来关心,基本不会出现。而编译时错误,如果你使用了编译器,那么编译器会提示。
Exception则是可以被抛出的基本类型,我们需要主要关心的也是这个类。编译没出错,运行出错
Exception又分为RunTimeException和其他Exception。
异常的继承体系结构:
最顶级的Throwable:错误,异常
Exception分类:编译器异常,运行期异常
1.编译期异常:其他;MyExceptiont
-
必须处置的异常,即程序在运行时由于外界因素造成的一般性异常
-
Java程序必须显示处理,否则程序就会发生错误,无法通过编译
-
在编译某个程序的时候,有可能会有这样那样的事情发生,比如文件找不到,这样的异常就必须在编译的时候处理,如果不处理编译通不过
编译器异常分类
java.lang.ClassNotFoundExeption:没有找到具有指定名称的类异常。 java.lang.FileNotFoundException:访问不存在的文件异常。 java.lang.IO Exception:操作文件时发生的异常。 java.sql.SQL Exception:操作数据库时发生的异常。
2.运行期异常:RunTimeException
-
编译器不要求强制处置的异常。一般是指因设计或实现方式不当而导致的问题。也可以说,是程序员的原因导致的,是本来可以避免发生的情况。
注:各个各记五个英文的
如果一个方法没有捕获编译器异常,该方法必须使用throws来声明
异常举例:
NullPointerException: 空指针异常,一般出现于数组,空对象的变量和方法 ArrayIndexOutOfBoundsException: 数组越界异常 ArrayStoreException: 数据存储异常
ArithmeticException: 算数异常,一般在被除数是0中
ClassCastException: 类型转换异常
IllegalArgumentException: 非法参数异常 IllegalThreadStateException: 非法线程状态异常 NumberFormatException: 数据格式异常 OutOfMemoryException: 内存溢出异常 PatternSyntaxException: 正则异常
自定义异常
原因:当Java提供的异常类,不够使用时,需要自己定义一些异常类。
开发中,大部分情况下使用的都是运行期异常
为什么要手动抛异常?
因为要配合全局异常处理机制来解决问题
方法:
1.所有异常必须是throwable的子类
2.如果要定义一个编译器异常,需要继承Exception类
3.如果要定义一个运行期异常,需要继承RunTimeException
如果使用throw抛出一个编译期异常,就必须在方法的声明处使用throws关键字来标记异常
-
throw语句是可以当返回值
-
在一个有返回值的方法中,如果有条件分支,一定要保证每种情况下都有返回值
throws和throw区别
一个方法中,throws可以抛多个异常,用逗号隔开
throws是在定义方法时候抛出异常,throw是在方法体内抛出异常
自定义异常类
定义错误码,定义异常信息
异常链
有时候我们会捕获一个异常后再抛出另一个异常 顾名思义就是将异常发生的原因一个传一个串起来,即把底层的异常信息传给上层,这样逐层抛出。
例:今天为什么这么穷,只因为当年潘金莲看了西门庆一眼
当异常没被解决的时候,可以选择抛出问题,留给下一级解决,要不然自己解决
主方法中不要抛了,再抛就抛给虚拟机JVM了
try--finally-return
方法的重写
重写的子类不能抛出比父类抛出的异常范围更大
标签:Exception,抛出,29,编译,编译器,2022,异常,throw,组陈美娜 来源: https://www.cnblogs.com/nanaxin/p/16533619.html