throw 和 throws 的区别

本文详细介绍了Java中异常处理的关键概念,包括Throwable类、Error和Exception的区分,以及throw和throws的用法。throw用于在方法内部抛出一个异常,如果异常不是运行时异常,则需要在方法声明中使用throws。throws则用于声明方法可能抛出的异常,提醒调用者需要处理。通过代码示例,阐述了两者的不同应用和注意事项。

我们在运行一段代码,做一个项目的时候遇到BUG、异常是再正常不过的事情。说到异常,异常种类是有很多种的,Throwable就是异常的根类。
常见的异常就有在Throwable下的子类 错误 - Error异常 - Exception

Exception异常又分为一般异常运行时异常 RuntimeException(运行时异常不需要代码显示捕获)

既然说了异常,那么重点就来了,常用的两个抛出异常的方法throwthrows,单独从外表看一个“s”的区别但用法却大了很多。。。。。

throw:

  • 表示方法内抛出某种异常对象且只能是一个
  • 用于程序员自行产生并抛出异常
  • 位于方法体内部可以作为单独语句使用
  • 如果异常对象是非RuntimeException 则需要在方法申明时加上该异常的抛出,也就是加上throws 语句或者在try catch中处理异常,否则编译器会报错
  • 执行到 throw 语句则后面的语句块不再执行

代码示例:

package com.icss.interview;

import java.io.IOException;

/**
 * 这是测试throw和throws的区别的
 * @author HYF
 */
public class TestThrowThrows {
    public static void main(String[] args) {
        testThrows();

        Integer i = null;
        testThrow(i);

        String filePath = null;
        /**在 try catch 中处理异常**/
        try{
            testThrow(filePath);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
	/**
     * 测试 throw 关键字 抛出运行时异常
     * @param i
     */
    public static void testThrow(Integer i ) {
        if (i == null) {
            /**运行时异常不需要在方法上申明**/
            throw new NullPointerException();
        }
    }
    /**
     * 测试 throw 关键字抛出非运行时异常,需要方法体添加 throws 异常抛出申明
     */
    public static void testThrow(String filePath) throws IOException {
        if (filePath == null) {
            /**非运行异常时需要在方法体上添加 throws 申明抛出异常**/
            throw new IOException();
        }
    }
}

throws:

  • 方法上定义上使用throws表示这个方法可能抛出某个异常(相比较于throw可能会有多个异常对象)------>当别人调用你的方法时看到有throws提醒别人可能存在异常需要注意,可能需要做出相应处理
  • 还可以是用于声明该方法抛出异常
  • 和throw的区别必须跟在方法参数列表后面,不能够单独使用
  • 第一点提到的警告作用,所以在处理异常的时候需要由调用者进行异常处理

代码示例:

package com.icss.interview;

import java.io.IOException;

/**
 * 这是测试thow和thows的区别的
 * @author HYF
 */
public class TestThrowThrows {
    public static void main(String[] args) {
        testThrows();

        Integer i = null;
        testThrow(i);

        String filePath = null;
        try{
            testThrow(filePath);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
    /**
     * 测试 throws 关键字
     * @thows NullPointerException
     */
    public static void testThrows() throws NullPointerException {
        Integer i = null;
        System.out.println(i + 1);
    }

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

Java中,`throw``throws`是两个用于异常处理的关键字,但它们的作用使用场景有所不同。 ### `throw` `throw`关键字用于显式地抛出一个异常。它可以用于方法内部,用于抛出自定义异常或预定义异常。 #### 示例代码: ```java public class ExceptionExample { public static void checkAge(int age) { if (age < 18) { throw new ArithmeticException("Access denied - You must be at least 18 years old."); } else { System.out.println("Access granted - You are old enough!"); } } public static void main(String[] args) { checkAge(15); // 这将抛出ArithmeticException } } ``` ### `throws` `throws`关键字用于方法签名中,用于声明该方法可能抛出的异常。它告诉方法的调用者需要处理这些异常。 #### 示例代码: ```java public class ExceptionExample { public static void checkAge(int age) throws ArithmeticException { if (age < 18) { throw new ArithmeticException("Access denied - You must be at least 18 years old."); } else { System.out.println("Access granted - You are old enough!"); } } public static void main(String[] args) { try { checkAge(15); // 调用者需要处理可能抛出的ArithmeticException } catch (ArithmeticException e) { System.out.println("Caught Exception: " + e.getMessage()); } } } ``` ### 区别总结 1. **作用**: - `throw`用于方法内部,用于抛出异常。 - `throws`用于方法签名,用于声明方法可能抛出的异常。 2. **使用场景**: - `throw`用于在方法内部主动抛出异常。 - `throws`用于声明方法可能抛出的异常,提醒调用者处理这些异常。 3. **语法**: - `throw`后面跟一个异常对象。 - `throws`后面跟一个或多个异常类。 通过理解这两个关键字的区别使用场景,可以更好地进行异常处理,确保程序的健壮性可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值