java第十四课(异常,异常关键字try,catch,finally,throw,throws)

1.异常

异常是指程序在编译或者运行的过程中可能出现的问题。

比如数组越界,空指针异常,日期格式化异常等等。

异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。

Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。

2.异常体系结构

Throwable是java异常体系中的根类,里面有两个常用方法:

  1. void printStackTrace();==>打印栈中的异常信息
  2. String getMessage();==>获取异常信息

有两个子类:

  1. Error:错误,是Java程序无法处理的(内存溢出等)
  2. Exception:异常,出现的一般性问题,可以使用java中的异常处理机制进行处理的

3.关键字

  • try==>执行可能产生异常的代码
  • catch==>捕获异常
  • finally==>无论是否发生异常,代码总能执行
  • throws==>声明方法可能要抛出的各种异常
  • throw==>手动抛出异常
try {
   // 可能会抛出异常的代码
}
catch (ExceptionType1 e1) {
   // 处理异常的代码块1
}
catch (ExceptionType2 e2) {
   // 处理异常的代码块2
}
finally {
   // 无论是否有异常都要执行的代码
}

其中,try块和catch块是必须的,finally块可以省略。

如果try块中的代码抛出异常,程序将跳转到最近的catch块,并执行相应的代码块。如果没有catch块捕获该异常,异常将会被抛到调用者处继续处理。

无论try块中是否有异常,finally块中的代码都会被执行。通常,在finally块中释放资源(如文件、流等)或执行善后工作。

[修饰符] 返回值类型 方法名(参数列表) throws 异常类型1,异常类型2,...{
    // 方法体
}

 其中,throws后面的异常类型可以是多个,用逗号分隔。如果方法将会抛出多个异常,可以使用一个throws语句来声明所有的异常类型。

public void readFile(String fileName) throws FileNotFoundException, IOException {
    FileInputStream fis = new FileInputStream(fileName);
    // 读取文件内容
    fis.close();
}

需要注意的是,使用throws声明方法抛出异常,并不是要求方法必须抛出异常,而是在方法中可能会抛出这些异常。如果方法没有抛出任何异常,也不会报错。

public void checkAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("Age cannot be negative"); // 抛出IllegalArgumentException异常
    } else if (age > 150) {
        throw new IllegalArgumentException("Age cannot be greater than 150"); // 抛出IllegalArgumentException异常
    } else {
        System.out.println("Age is: " + age);
    }
}

 在上面的示例中,如果传入的age参数小于0或大于150,则会抛出IllegalArgumentException异常。通过手动抛出异常,可以使程序更加灵活和健壮。

4.自定义异常

Java中可以通过继承Exception或RuntimeException类来自定义异常。一般情况下,我们会继承Exception类,因为RuntimeException及其子类表示的是程序错误,而Exception及其子类表示的是程序异常情况。

步骤

  1. 创建一个类,继承Exception或RuntimeException类。

  2. 在构造方法中调用父类的构造方法,并传入错误信息。

  3. 在需要抛出异常的地方,使用throw关键字抛出自定义异常对象。

 

// 自定义异常类
class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}
 
// 调用自定义异常的类
public class Test {
    public static void test() throws MyException {
        throw new MyException("MyException occurred"); // 抛出自定义异常
    }
 
    public static void main(String[] args) {
        try {
            test();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,自定义了一个MyException异常类,并在方法test()中使用throw关键字抛出了自定义异常对象。在主函数中通过try-catch语句捕获异常,并打印异常信息。

作用:

        标记业务逻辑的异常,避免与标准异常混淆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值