面向对象集|每日一题:Java 中 throw 和 throws 有什么区别?

754 阅读1分钟

参考回答:

throw 在方法体内使用,throws 在方法声明上使用;

throw 后面接的是异常对象,只能接一个。throws 后面接的是异常类型,可以接多个,多个异常类型用逗号隔开;

throw 是在方法中出现不正确情况时,手动来抛出异常,结束方法的,执行了 throw 语句一定会出现异常。而 throws 是用来声明当前方法有可能会出现某种异常的,如果出现了相应的异常,将由调用者来处理,声明了异常不一定会出现异常。

解析: throw 和 throws 都是用来进行 Java 异常处理的。

其中,throw 是用在某个方法的方法体内的,当我们认定某种情况不合理时,就可以创建异常对象,封装好异常信息,然后通过 throw 来抛出异常并终止该方法。

public class Student {
    // 性别
    private String gender;

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        if (!("男".equals(gender) || "女".equals(gender))) {
            throw new IllegalArgumentException("非法性别:" + gender);
        }
        this.gender = gender;
    }
}

而 throws 是用在某个方法的方法声明上的,表示当前方法如果抛出了某些异常,将由调用者来进行异常处理。这种方式也可以让调用者知晓该对哪些异常进行处理。throws 声明的异常不一定会出现,只是一种可能。

public class FileInputStream extends InputStream {
    public FileInputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null);
    }
}