异常处理之throw(主动抛)和throws(被动抛)以及自定义异常类"/>
java异常处理之throw(主动抛)和throws(被动抛)以及自定义异常类
throw,throws,自定义异常类
- throws被动抛
- 格式和位置
- 编译时异常和运行时异常
- 使用的注意事项
- 1.哪里调用抛哪里
- 2.抛编译时异常和运行时异常的区别
- 3.子父类继承时
- throw主动抛
- 1. 格式和位置
- 2.Exception的有参构造
- 自定义异常类
- 1.格式
- 2.用法
throws被动抛
格式和位置
修饰符 返回值类型 方法名(参数列表) throws 异常类名 {方法体内容}
异常被抛给java虚拟机jvm了,在发生异常的代码处会中断执行,在控制台由jvm打印异常信息,换言之,发生异常之后的代码都不再执行。
可以连续抛多个异常
编译时异常和运行时异常
①针对运行时异常RuntimeException,它在编译时不会报红,只会在运行时打印错误,就算我们不在方法声明后面throws运行时异常,java虚拟机jvm也会帮我们在控制台输出异常信息,所以针对RuntimException加不加其实都可以。
②但是编译时异常会在你写代码的时候就报红(有红叉),你要吗try-catch要么抛出去,不然没办法生成.class字节码文件,就根本无法运行。
使用的注意事项
1.哪里调用抛哪里
a.在方法ccc()中的第26行代码,底层会创建ParseException pe = new ParseException();这里出现格式解析异常属于编译时异常,会报错,所以要吗try-cacth捕获后自己处理(处理后上面调用就不会再爆红了)
要吗在方法体上throws抛出异常,让调用者去处理。所以这个异常就被抛到调用者那里了。这就是所谓的哪里调用抛哪里
b.bbb()调用ccc(),那它要么try-catch处理ccc()抛出来的异常要么用throws 继续向上抛。aaa()同理
c.如果他们全都选择继续向上抛,那么main在调用aaa()时就会报红,可以在main里进行try-catch
当然!main也可以继续向上抛。main向上抛给谁呢?当然是调用它的java虚拟机(jvm)啦,而jvm已经是最底层了,他不能再继续向上抛了,就只能帮我们处理啦。
2.抛编译时异常和运行时异常的区别
如果抛的是编译时期异常的话,哪里调用抛里,接收的地方还是要继续处理,要么抛要么捕获(因为会报红)
如果抛的是运行时期异常的话,哪里调用抛哪里,接收的地方是不需要处理的。(能正常编译在运行时才会出现)
3.子父类继承时
在子父类继承中,子类重写父类的方法,如果父类的方法没有抛异常,子类的方法也不能抛异常。
如果父类方法也抛异常了,子类重写的方法所抛的异常不可以是父类方法所抛异常的父类
(子类抛出的异常范围不能超过父类)
throw主动抛
1. 格式和位置
格式:throw 异常对象
位置:写在方法的里面
2.Exception的有参构造
Exception e = new Exception(“没有给我吃肉”);
就是有参构造,可以用来描述具体的错误信息
自定义异常类
1.格式
写一个类让它extends(继承) throwable,Exception,RuntimeEXception等,它就成为异常类了。通常里面留一个空参构造,一个有参构造就可以了。
2.用法
更多推荐
java异常处理之throw(主动抛)和throws(被动抛)以及自定义异常类
发布评论