Java异常

异常:
异常的重要性:
没有不会异常的程序。
80%精力处理20%可能出现异常的代码

异常和错误的分类
异常(Exception)
1、编译时异常(checkedException);编译器在编译代码时所发现的
在方法的申明后面实现的前面,用throws关键字后面跟上会抛出的异常类型的类名,
表示本方法有可能会抛出某几种类型的异常
细节:
1、一个方法的完成申明形式包括了throws,甚至main方法也可以throws
2、方法重写的规范被更新,增加:子类被重写的方法不能比父类抛出更多的异常;
3、只有在抛出编译时异常调用者才会受到警告;抛出运行时异常,调用者不会在编译期被警告。


2、运行时异常(RuntimeException);JVM在运行时所发现的
JVM异常流程:如果运行时出错,JVM虚拟机会自动产生一个Exception对象(抛(throws))给该方法,并且不继续执行该方法下面的代码,然后向上抛.......直到结束

异常的处理,有三种选择:
1、捕获这个异常,不让他沿着调用栈继续向下抛出;try{ }catch(){ }finally{ };
2、捕获这个异常,并继续向下抛出;throws(通知本方法调用者,本方法有可能会抛出异常)
3、不捕获这个异常,从而导致方法从调用栈中被弹出,异常对象继续抛给调用栈下面的方法;

错误(Error)
无法用代码挽回,往往是硬件问题或运行环境问题。

异常的继承结构:
Throwable
Error     Exception
除了RuntimeException     全是编译时异常
(所有的运行时异常)
如何处理异常
1、捕获:try{ 正常逻辑代码,但有可能发生异常 }catch(异常类型 变量名){ 处理 }finally{ 不管是否发生异常,都必须要执行的代码(资源清理、连接关闭、管道关闭) }
(可以跟多个catch块(如果catch块里面没有继承关系,顺序可以随便写,如果有继承关系,子类的catch必须写在父类之前))

Exception:pritStackTrace();(开启一个线程去打印报错信息)
打印异常的堆栈信息,开发测试阶段打印出来未知的异常信息,便于进行代码的调整,程序依然会执行完,并且打印的信息和不catch的报
错信息不同,会少一个Exception in thread 错误的线程,运行阶段,往往都会把这句代码注释掉。

语法细节:
1、catch块是有顺序的
2、try、catch、finally不允许单独存在、catch与finally前面必须有try

程序员怎么用异常处理:
1、编译时异常:调用先人有throws声明的方法,99%马上try-catch;
2、运行时异常:1、多做if判断,不让异常有产生的机会(99%);2、不是所有异常都用try-catch,例:空指针,
3、throw和throws只有在大型分层项目当中,才有肯能自己写

2、向上抛
1、异常抛出机制。
2、处理方法:
1、try{ }catch(){ }finally{ };
2、 throw、 throws()
异同:位置:方法体中,是一条执行语句 写在方法申明的最后,是一条申明语句
后面接的内容:接的是一个异常对象 接的异常类的类名(只能抛编译时异常类型),可以跟多个。
效果不同:一旦执行到throw语句,就会真正的发生1个异常对象抛出的动作;
本方法有可能抛出某种或某几种类型的异常。仅在编译器提示调用者,运行期不一定发生
3、自定义异常:
语法
1、必须是一个异常类
2、自己添加的功能行为(例如添加书写日志)
3、构造方法,为了让其他异常类型转换为自定义异常(传入Exception然后调用父类的构造)
在一个方法中抛出异常
在另一个方法捕获并处理异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值