Java学习之异常


前言

才疏学浅,能力有限,如有错误,欢迎评论指出,一起进步~

一、异常的概述

1、异常的概念

在Java语言中,将程序执行中发生的不正常的情况称为“异常”。
注意:语法错误和逻辑错误不是异常。

2、异常事件的分类:

  • error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误,资源耗尽等严重情况。
  • Exception:其他因编程错误或者偶然的外在因素导致的一般性问题,可以使用针对性的代码处理。例如:空指针访问,试图读取不存在的文件,网络连接中断,数组角标越界。

二、异常的体系结构

在这里插入图片描述

三、常见的异常

常见的运行期异常:

  • ArithmeticException:算数异常
  • ClassCastException:类型转换异常
  • IndexOutOfBoundsException:下标越界异常
  • NullPointerException:空指针异常
  • NumberFormatException:数字格式化异常

常见的编译期异常:

  • EOFException:输入过程中意外地到达文件结束或流结束。
  • FileNotFoundException:指示尝试打开由指定路径名表示的文件失败。

四、异常的处理

1、异常的处理机制

  1. 将异常处理的程序代码集中到一起,与正常的程序代码分开,使得程序简洁,易于维护。
  2. Java提供的异常处理是抓抛模型。
  3. 如果出现异常,会生成一个异常类对象,该异常对象将被提交给Java运行时的系统,这个过程称为抛出异常。一旦抛出异常对象后,后续代码将不会执行。
  4. 异常对象的产生:系统自动生成异常对象;手动生成异常对象,并抛出(throw)

2、异常处理的方式

1.try-catch-finally

使用格式:

try {
            //可能发生异常的代码
        }catch (异常类型1 变量名1){
            //处理方式1
        }catch (异常类型2 变量名2){
            //处理方式2
        }catch (异常类型3 变量名3){
            //处理方式3
        }finally {
            //一定执行的代码
        }

注意:

  • finally是可选的。
  • 使用try将可能出现异常的代码包起来,程序执行中,一旦出现异常,就会生成异常对象,根据此对象的类型,去catch中匹配。
  • 一旦try中的异常匹配到catch时,就进入catch中的处理代码,一旦处理结束,跳出该try-catch结构(没有finally的情况下)。继续执行后续代码。
  • 如果catch中的异常类型有父子关系,则子类在上,父类在下。
  • 常见的异常处理方式:String getMessage();printStackTrace()
  • try代码块中定义的变量不能在代码块外面访问。
  • finally代码块中的代码是一定会执行的(当然,也有例外,比如虚拟机异常结束)。即使catch中又出现了异常,try中有return语句,catch中有return语句等。
  • 像数据库的连接,输入输出流网络编程Socket等资源,JVM不能自动回收,需要手动回收。此时,资源的释放,就需要写在finally中。

2.throws + 异常类型

  • 此方式写在方法的声明处。表示执行此方法时,可能会抛出异常。并且将该类型的异常抛给方法的使用者。并没有真正处理掉。
  • try-catch-finally:真正的将异常处理掉了。
  • 在main方法上抛出异常,实际上就是将异常交给虚拟机处理了。

五、手动抛出异常

通过throw关键字手动抛出异常对象。代码实例:

public int confirm(int x) throws Exception {
        if(x > 0){
            return x;
        }else {
            throw new Exception();
        }
    }

五、自定义异常类

步骤:

  1. 继承现有的异常类:RuntimeException、Exception
  2. 提供全局常量:serialVersionUID(相当于唯一标识了该类)
    代码实例:
public class ExceptionDemo02 extends Exception{

    static final long serialVersionUID = -70923894332459l;

    public ExceptionDemo02() {

    }
    public ExceptionDemo02(String message){
        super(message);
    }
}

public class Main {

    public static void main(String[] args) throws ExceptionDemo02 {

        int x = 33;

        if(x > 30){
            throw new ExceptionDemo02("该数字大于30");
        }
    }
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值