java的异常处理之throws

博客介绍了Java中throws关键字的作用,当有些异常无法处理时,可使用throws关键字将异常抛出交给别人处理。通过代码示例展示了throws关键字在方法后的使用,以及可同时抛出多个异常,需在外层代码捕获,还提到不建议在main方法里抛出异常让虚拟机处理。

前面的章节,我们说到了throw关键字抛出一个异常。但是有的时候,有些异常我们是无法处理的,所以,此时,我们要使用throws

关键字将异常抛出,交给别人来处理,这就是我们的throws关键字的作用.throw关键字抛出异常,交给外层的代码来处理这些异常。我们还是来看看代码吧。

前面的章节,我们说到了throw关键字抛出一个异常。但是有的时候,有些异常我们是无法处理的,所以,此时,我们要使用throws关键字将异常抛出,交给别人来处理,这就是我们的throws关键字的作用.下面还是来看看代码吧,主要是用在方法之后,就不会使用try   catch来捕获这些异常.将代码抛出的异常交给别人处理.package denoerror;

public class deno4 {
  public static void show() throws InterruptedException {
      for(int i=0;i<10;i++) {
          System.out.println(i);
          Thread.sleep(1000);//休眠一秒
      }
  }
  
  public static void main(String[] args) {
    try {
        show();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}
throws抛出一个异常,当主方法调用我们定义的方法的时候,注意throw关键字一般是写在方法之后的,表示该方法不能处理这个这个异常.,所以将异常交给别人来处理。在我们的main方法里面,调用这个方法的时候,就必须对这异常进行捕获。注意同时可以抛出多个异常,在外层的代码来捕获这些异常。代码如下,package denoerror;

public class deno4 {
    public static void show() throws InterruptedException, NullPointerException, Exception {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
            Thread.sleep(1000);// 休眠一秒
        }
    }

    public static void main(String[] args) {
        try {
            show();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("捕获到了这个异常.");
        } catch (NullPointerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}从代码可以看到,throws关键字抛出了3个异常,必须在外层代码捕获这三个异常。但是有时候,我们可以在main方法里面抛出异常。那个这个异常只能使用java虚拟机来对其进行处理了。我们无法来对其进行处理。这样写不好.一般不建议这样使用。

 

Java 中,异常处理是程序健壮性的重要保障。`throws` 关键字用于声明一个方法可能抛出的**检查型异常(checked exception)**,它告诉调用者:这个方法可能会出错,你得处理! 当一个方法内部发生了异常但不想自己处理时,可以用 `throws` 将异常抛给上层调用者处理。调用者可以选择使用 `try-catch` 捕获并处理,或者继续向上抛出。 --- ### ✅ 示例:使用 `throws` 抛出异常,并在调用处捕获 ```java import java.io.FileInputStream; import java.io.FileNotFoundException; public class ExceptionThrowsExample { // 使用 throws 声明该方法可能抛出 FileNotFoundException public static void readFile(String fileName) throws FileNotFoundException { System.out.println("尝试打开文件: " + fileName); FileInputStream file = new FileInputStream(fileName); // 如果文件不存在,会抛出异常 file.close(); } public static void main(String[] args) { String filename = "nonexistent.txt"; // 一个不存在的文件 try { readFile(filename); // 调用可能抛出异常的方法 } catch (FileNotFoundException e) { System.out.println("捕获到异常:文件未找到!"); System.out.println("详细信息: " + e.getMessage()); } System.out.println("程序继续正常运行..."); } } ``` --- ### 🔍 代码解释: 1. **`readFile()` 方法**: - 使用了 `throws FileNotFoundException`,说明此方法不处理该异常,而是交给调用者处理。 - `FileInputStream` 构造函数如果找不到文件,就会抛出 `FileNotFoundException`。 2. **`main()` 方法中使用 `try-catch`**: - 调用了 `readFile()`,由于它可能抛出异常,所以必须进行捕获或再次 `throws`。 - 这里我们选择用 `try-catch` 捕获异常,避免程序崩溃。 3. 即使发生异常,`catch` 块会执行,后续代码(如“程序继续…”)仍能运行,体现了良好的错误恢复机制。 --- ### ❗ 注意事项: - `throws` 只适用于 **检查型异常(checked exceptions)**,比如 `IOException`, `SQLException` 等。 - 对于运行时异常(如 `NullPointerException`, `ArrayIndexOutOfBoundsException`),可以不用 `throws` 显式声明,也可以抛出。 - 如果 `main` 方法也不处理异常,也可以写成 `public static void main(String[] args) throws Exception`,但这不是推荐做法。 --- ### 🧠 相关技巧:多个异常的处理 ```java public static void riskyOperation() throws IOException, SQLException { // 可能抛出多种异常 } ``` 在 `catch` 中也可以多捕获: ```java try { riskyOperation(); } catch (IOException e) { System.out.println("IO异常: " + e.getMessage()); } catch (SQLException e) { System.out.println("数据库异常: " + e.getMessage()); } ``` 或者使用 Java 7+ 的多异常捕获语法: ```java catch (IOException | SQLException e) { System.out.println("发生异常: " + e.getClass().getSimpleName()); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值