简单区分:throw和throws到底干啥的?
- throw:表示动作,用来在代码中“扔”一个异常(比如程序遇到问题,说“我不干了”,扔出一个问题)。
- throws:表示一种状态,用来声明“我这个方法可能会遇到问题,调用我的人得注意”。
一句话总结:throw是干活的(扔异常),throws是打招呼的(告诉别人我可能会扔异常)。
核心区别在哪里?
1. 用法场景不同
- throw 用在方法的代码块内部(具体实现里),表示实际抛出一个异常。
- throws 用在方法声明的地方(方法签名中),告诉调用者这个方法可能会抛出异常。
小贴士:
throw
后面跟的是实际异常对象,比如throw new Exception("出错啦!")
。throws
后面跟的是异常类型,比如throws Exception
。
2. 抛出的数量不同
-
throw:一次只能抛出一种异常。
例子:throw new NullPointerException("空指针异常!");
-
throws:可以声明多个异常,用逗号隔开。
例子:public void myMethod() throws IOException, SQLException {}
3. 主动 vs 被动
- throw:是主动行为,你明确告诉程序“这里出问题了,我要抛异常”。
- throws:是被动行为,你告诉调用者“这个方法里可能会有异常,你得准备好处理”。
简单理解:
- throw 就像直接报警:“着火啦!快来救火!”
- throws 就像提醒:“这里可能会有火灾,提前备好灭火器哦!”
举个例子看懂两者
代码示例
public void str2int(String str) throws Exception { // 方法声明,告诉调用者可能会抛出异常try {System.out.println(Integer.parseInt(str));} catch (NumberFormatException e) {// 捕获异常后,再抛出一个新的异常,让调用者知道这里出问题了throw new Exception("格式化异常"); // 实际抛出异常}
}
怎么理解?
-
throws在方法名后面声明:
表示这个方法可能会遇到Exception
,调用它的人(比如主程序)需要准备好接住这个异常。 -
throw在方法体内实际抛出异常:
程序尝试把字符串转换为数字,如果失败了,就抛出一个格式化异常(throw new Exception("格式化异常")
)。
表格总结:throw和throws的区别
区别点 | throw | throws |
---|---|---|
作用 | 用来实际抛出异常 | 声明方法可能会抛出异常 |
位置 | 方法体内部 | 方法签名后面 |
抛出数量 | 一次只能抛一个异常 | 可以声明多个异常,用逗号隔开 |
主动/被动 | 主动抛异常 | 被动告诉可能有异常 |
小结:一段话记住区别
- 如果你在方法里发现问题,要throw一个异常告诉程序“我扔一个问题出来”。
- 如果你的方法可能出问题,但不负责处理,就用throws告诉别人“你调用我之前先准备好应对这些问题”。
简单说:throw是实干家,throws是预告员。
最后说一句(求关注,求赞,别白嫖我)
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的 7701页的BAT大佬写的刷题笔记,让我offer拿到手软
本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享
求一键三连:点赞、分享、收藏
点赞对我真的非常重要!在线求赞,加个关注我会非常感激!