java基础之异常处理

异常作用:在运行java代码时,如果有错是无法编译成功的,IDE会给出一串错误说明;如果编译通过,程序运行过程中,JVM检测出一个不可执行的操作,会出现运行时错误,IDE也会给出错误说明;这就是java异常类的作用。

异常分类:java中的异常都是继承自Throwable类,它的两个子类为Error与Exception。Error类层次结构描述了java运行时系统的内部错误和资源耗尽错误。Exception有一个子类RuntimeException,它描述的是程序设计错误,需要修改逻辑 ;而程序本身没有问题,但由于像IO错误这类问题导致的异常属于其他异常。RuntimeException、Error以及它们的子类都称为免检异常;所有其它异常称为必检异常,需要程序员检查并通过try-catch块来处理。

使用异常:java的异常处理模型基于三种操作:声明异常(throws)、抛出异常(throw)、捕获异常(try-catch-finally)。
java当前执行的语句通常属于某个方法,方法不仅需要告诉编译器返回什么值,还要告诉编译器有可能发生什么错误。因此方法需要声明它可能抛出的必检异常类型,他人使用该方法时会知道捕获何种异常。通过throws关键字声明:

public void myMethod () throws IOException

一个方法必须声明所有可能抛出的受查异常。

通过条件判断,如果方法中可能出现异常,就要抛出它。比如

throw new IOException(parameter)

一旦方法抛出了异常,这个方法就不可能返回到调用者。也就是说,不必为返回的默认值或错误码担忧。

疑 问 : 后 端 修 改 数 据 库 数 据 时 , 网 络 异 常 , 导 致 修 改 失 败 , 抛 出 异 常 , 前 端 该 怎 样 处 理 呢 ? \textcolor{red}{疑问:后端修改数据库数据时,网络异常,导致修改失败,抛出异常,前端该怎样处理呢?}

当调用方法时,如果某个异常发生的时候没有在任何地方进行捕获,那程序就会终止执行,并在控制台打印出异常信息。try-catch语句可以捕获异常,当try中的业务语句抛出的异常对应到catch中的异常类型,会被捕获,

try{ 
     statements;
}catch(IOException ex){ 
     ex.printStackTrace(); 
}catch(Exception e){
     e.printStackTrace(); 
}finally{
    
}

如果调用了一个抛出受查异常的方法,就必须对它进行处理, 或者继续传递异常到调用的地方。

当代码抛出一个异常时, 就会终止方法中剩余代码的处理,并退出这个方法的执行。如果方法获得了一些本地资源,并且只有这个方法自己知道,又如果这些资源在退出方法之前 必须被回收,那么就会产生资源回收问题。上面finally字句可以很好地解决这一问题,无论在 try 语句块中是否遇到异常,finally 子句语句都会被执行。执行顺序try–finally–catch(或者try中的return)。

try-with-resource

需要关闭资源时,使用带资源的 try 语句是一种好的选择。

try (Scanner in = new Scanne(new FileInputStream('7usr/share/dict/words"). "UTF-8"):
PrintWriter out = new Pri ntWriter("out.txt"))
{
while (in.hasNextO)
out.pri ntl n(i n.next().toUpperCaseO);
}

不论这个块如何退出, in 和 out 都会关闭。如果你用常规方式手动编程,就需要两个嵌 套的 try/finally语句。

自定义异常
我们自定义一个异常类MyException,它的功能是输出“出现异常”来提示我们出现异常。people类中的setSex方法声明并抛出此异常。测试类中调用了setSex方法,因为该方法可能会抛出异常,所以在调用的地方我们用try-catch块来处理可能捕获的异常。

public class TestMyException {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        People p=new People();
        try {
            p.setSex("Male");
        } catch (MyException e) {
            e.printStackTrace();//输出异常信息
        }
    }
}
class MyException extends Exception{
    public MyException(String message) {
        super("出现异常:"+message);
    }
}

class People {
    String name="";
    int age=0;
    String sex;
    public String getSex()
    {
        return sex;
    }
    public void setSex(String sex) throws MyException{
        if("男".equals(sex) || "女".equals(sex)) {
            this.sex=sex;
        } else {
            throw new MyException("性别必须是男或者女");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值