Java编程之异常处理

程序异常指的是是程序中的错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的
例如用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。

异常发生的原因有很多,通常包含以下几大类:

  • 输入了非法数据。
  • 要打开的文件不存在。
  • 网络通信时连接中断,或者JVM内存溢出。

引起异常的方式有很多,可能是程序员的错误导致的,有可能是内存不足导致的,甚至可能是硬件设备出现错误导致的。有些异常作为程序设计者是无法避免的,但是其他异常是可以通过提升程序的健壮性来增强的。

要理解Java异常处理是如何工作的,主要有以下三种类型的异常:

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

异常的关系如下图所示:
在这里插入图片描述

自定义异常:
在程序中我们经常需要自己设计一个异常类,例如设计一个账户系统时,若账户不存在,那么就抛出一个AccountNotExistExcepiton
你可以尝试着定义如下

public class AccountNotExistExcepiton extends Exception
    {
        String accountName;
        AccountNotExistExcepiton(String accountName){
            this.accountName = accountName;
        }

        public void showName(){
            System.out.println(accountName + "Not Exist");
        }
    }

定义异常需要包括发生异常时的重要信息,方便在处理时能够更加清楚异常发生时的状态。但是具体需要是什么内容取决于程序的需要,异常的定义没有固定的模板。

抛出异常:
抛出的异常可以通过try catch 处理 或者返回给调用者处理,因为有时调用者比你更清楚异常发生的原因,有更好的处理方式,所以不要盲目的自己处理异常

如果函数在发生异常时想要自己处理并返回一个正确的值(此时不要返回null,否则调用者还需判断,相当于没有处理)

public Account getAccount(String accountName){
    try{
        /* try get account by name */
    }catch(AccountNotExistExcepiton e){
        /*do something*/
    }finally{
        // ...
    }
}

或者最好这样做

public boolean TakeMoney(String accountName , double value){
    Account account;
    try {
        account = getAccount(accountName);
    } catch (AccountNotExistExcepiton e) {
        /* do something like return false */
    }
    return true;
}

public Account getAccount(String accountName) throws AccountNotExistExcepiton{
    /*....*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值