JAVA异常

14 篇文章 0 订阅
1 篇文章 0 订阅

异常
Java中的异常指程序中的一些错误,但并不是所有的错误都是异常,因为有的错误是可以避免的。
:当程序当中因为少写了一个分号,这个时候就会运行结果就会出现一个错误-Java.lang.Error;而当我们输出10/0是就会出现一个异常-java.lang.ArithmeticException,因为0不能作为被除数。

要理解Java中异常处理是如何工作的,我们就需要了解一下3种异常

  1. 检查性异常(IOException):通俗来说,检查性异常就是在编译时能够捕捉到的异常。例如打开不存在的文件等引发的异常。这些异常在程序编译时不会被简单地忽略。
  2. 运行时异常(RuntimeException):通俗来说,这种异常程序在编译时被忽略,而在程序运行时才会被捕捉到。例如,除数为0的算数异常ArithmeticException等等,这种异常是运行时发生,无法预先捕捉处理的。
  3. 错误(Error):错误不是异常,在程序中常常被忽略,例如当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

异常的分类
在这里插入图片描述

  1. Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。
  2. 错误和异常的区别是错误不能被处理,而异常可以被处理。

捕获异常

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
  1. Catch 语句包含要捕获异常类型的声明。
  2. try中的代码称为保护代码,当里面的代码出现一个异常,try 后面的 catch 块就会被检查。

实例

package java_demo.异常;

public class Yic {
    public static void main(String args[])
    {
        try
        {
            int temp[] = new int[2];
            System.out.println(temp[3]);
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            System.out.println("出现异常:"+e);
        }
    }

}

结果
在这里插入图片描述
小结

  1. 面的例子中声明有两个元素的一个数组,当代码试图访问数组的第三个元素的时候就会抛出一个异常。
  2. 这是一个运行时异常,编译代码时无法捕获,运行时才能捕获。

声明自定义异常
在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

  1. 所有异常都必须是 Throwable 的子类。
  2. 如果希望写一个检查性异常类,则需要继承 Exception 类。
  3. 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

实例:银行存取钱例子

InsufficientFundsException类

package java_demo.异常.自定义异常;

public class InsufficientFundsException extends Exception //自定义异常类
{
    private double amount;

    public InsufficientFundsException(double amount) {
        this.amount = amount;
    }
    public double get_amount()
    {
        return amount;
    }
}

CheckingAccount类

package java_demo.异常.自定义异常;

public class CheckingAccount
{
    private int balance;
    public void deposit(double amount) //存钱
    {
        balance += amount;
    }
    public void withdraw(double amount) throws InsufficientFundsException //取钱
    {
        if(balance>=amount)
        {
            balance -= amount;
        }
        else
        {
            double need = amount - balance;
            throw new InsufficientFundsException(need); //向上抛出异常
        }
    }
    public double get_balance() //返回余额
    {
        return balance;
    }
}

BankDemo类

package java_demo.异常.自定义异常;

public class BankDemo
{
    public static void main(String args[])
    {
        System.out.println("存入500RMB!");
        CheckingAccount a = new CheckingAccount();
        a.deposit(500);
        try { //捕获异常
            System.out.println("取出600RMB!");
            a.withdraw(600);
        } catch (InsufficientFundsException e) {
            System.out.println("余额缺少:"+e.get_amount());
            e.printStackTrace();
        }
    }
}

结果
在这里插入图片描述

throws/throw 关键字

  1. 如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。
  2. 也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值