3.3 java基础总结①异常②自定义异常
Posted 远秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.3 java基础总结①异常②自定义异常相关的知识,希望对你有一定的参考价值。
①异常②自定义异常
一、Java中问题概述
一般来说有个2/8原则,一个程序员80% 的精力在处理20%可能发生异常的代码
Java中问题分为错误(Error)和异常(Exception)
错误:不能用代码解决的问题,往往是环境或者硬件的问题
异常:可通过修改代码或者预处理来解决的不正确情况,称为异常
异常分为编译期异常和运行时异常,如果抛编译异常,语法上调用者必须处理或往上抛;抛运行时异常,调用者可不往上抛
Java里边结束的3中方式:
①正常执行完
②return返回
③发生异常,没有处理,强制结束
都是返回方法的调用处
处理异常的方式:
①捕获异常,不让它沿调用栈继续抛出
②捕获,并继续向下抛出
③不捕获,导致方法从调用栈中弹出
二、捕获异常 try catch finally
try{
try块(尝试)
}catch(Exception Type){
catch块(捕捉)
}finally{
finally块(总会执行)
}
try块如果发生异常,抛出异常,跳到对应的catch块,执行问catch块后跳出,(不会再执行匹配后边的catch)。最后加Exception,防止有未捕获到的异常。
Exception要写在最后,catch有顺序,有继承关系的,子类在前,父类在后。
try后边可以接多个catch,复杂代码中多种异常处理可以提升用户体验。
finally块总会执行,即使有break,return,都会执行完finally再return,代码级别能关闭finally的只有System.exit();
所以这里一般用作清理一些资源,比如流的关闭,链接的关闭
catch和finally必须要配套try,不能单独出现,可以有
try catch,catch
try finally
try catch finally
三、抛异常 throw
throw Exception 方法声地方,后边跟抛出的异常类型(语句)
throws 后边可接多种异常类型,子类抛出的异常不能比父类多(不是指个数,而是范围)
方法声明完整格式:访问修饰符、可选修饰符、返回类型、方法名(形参列表) throws 异常类型1,2,3
Throwbale这里有两个方法比较重要:
-getMessage(得到异常信息,不是所有的异常都有异常信息,这里的信息比如除数为0)
-printStackTrace(打印堆栈信息)
throw抛异常(主动抛)非常有用,
抛编译异常,方法里必须处理(trycatch或者往上抛),如果往上抛,调用者也必须trycatch或者往上抛
抛运行异常,可以不用往上抛,或者trycatch
四、自定义异常:
①创建一个类继承Exception
②添加构造方法和普通方法
构造方法里主要是各种异常类型,普通方法里可以写日志等等
③在一个方法中抛出异常
④在另一个方法中捕获异常并处理
好处:不用每一处都处理,直接往上抛
遇到异常统统往上抛,可以把所有的异常全部抛到表现层,在表现层进行处理,并调用自定义异常的写日志等方法存起来
public class LovoException extends Exception{
public LovoException() {
}
public LovoException(Exception e){
//JVM产生的异常,使用多
super(e);
}
public LovoException(String message){
//根据业务异常,构造,使用较少
super(message);
}
public void writeLog (){
//各种日志文件
this.getStackTrace();
System.out.println(this.getMessage());
}
}
public void count() throws Exception {
int a = new Scanner(System.in).nextInt();
try {
int b = 3 / a;
System.out.println(3/a);
} catch (Exception e) {
// throw new LovoException(e.getMessage() + "除数不能是0");
throw new LovoException(e);
}
}
以上是关于3.3 java基础总结①异常②自定义异常的主要内容,如果未能解决你的问题,请参考以下文章
Throwable_异常的概述try-catch编译器异常和运行期异常throws处理异常finally关键字自定义异常
Throwable_异常的概述try-catch编译器异常和运行期异常throws处理异常finally关键字自定义异常
Throwable_异常的概述try-catch编译器异常和运行期异常throws处理异常finally关键字自定义异常
商城项目10_JSR303常用注解在项目中如何使用统一处理异常分组校验功能自定义校验注解