java异常处理之throw(主动抛)和throws(被动抛)以及自定义异常类

编程入门 行业动态 更新时间:2024-10-10 23:21:45

java<a href=https://www.elefans.com/category/jswz/34/1771210.html style=异常处理之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(被动抛)以及自定义异常类

本文发布于:2024-02-06 18:43:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750828.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:异常   自定义   主动   java   throws

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!