教妹学 Java :Throw 和 Throws

开发 后端
“throw 关键字,用于主动地抛出异常;正常情况下,当除数为 0 的时候,程序会主动抛出 ArithmeticException;但如果我们想要除数为 1 的时候也抛出 ArithmeticException,就可以使用 throw 关键字主动地抛出异常。”我说。

[[410259]]

 “二哥,你能告诉我 throw 和 throws 两个关键字的区别吗?”三妹问。

“throw 关键字,用于主动地抛出异常;正常情况下,当除数为 0 的时候,程序会主动抛出 ArithmeticException;但如果我们想要除数为 1 的时候也抛出 ArithmeticException,就可以使用 throw 关键字主动地抛出异常。”我说。

  1. throw new exception_class("error message"); 

语法也非常简单,throw 关键字后跟上 new 关键字,以及异常的类型还有参数即可。

举个例子。

  1. public class ThrowDemo { 
  2.     static void checkEligibilty(int stuage){ 
  3.         if(stuage<18) { 
  4.             throw new ArithmeticException("年纪未满 18 岁,禁止观影"); 
  5.         } else { 
  6.             System.out.println("请认真观影!!"); 
  7.         } 
  8.     } 
  9.  
  10.     public static void main(String args[]){ 
  11.         checkEligibilty(10); 
  12.         System.out.println("愉快地周末.."); 
  13.     } 

这段代码在运行的时候就会抛出以下错误:

  1. Exception in thread "main" java.lang.ArithmeticException: 年纪未满 18 岁,禁止观影 
  2.  at com.itwanger.s43.ThrowDemo.checkEligibilty(ThrowDemo.java:9) 
  3.  at com.itwanger.s43.ThrowDemo.main(ThrowDemo.java:16) 

“throws 关键字的作用就和 throw 完全不同。”我说,“异常处理机制这小节中讲了 checked exception 和 unchecked exception,也就是检查型异常和非检查型异常;对于检查型异常来说,如果你没有做处理,编译器就会提示你。”

Class.forName() 方法在执行的时候可能会遇到 java.lang.ClassNotFoundException 异常,一个检查型异常,如果没有做处理,IDEA 就会提示你,要么在方法签名上声明,要么放在 try-catch 中。

“那什么情况下使用 throws 而不是 try-catch 呢?”三妹问。

“假设现在有这么一个方法 myMethod(),可能会出现 ArithmeticException 异常,也可能会出现 NullPointerException。这种情况下,可以使用 try-catch 来处理。”我回答。

  1. public void myMethod() { 
  2.     try { 
  3.         // 可能抛出异常  
  4.     } catch (ArithmeticException e) { 
  5.         // 算术异常 
  6.     } catch (NullPointerException e) { 
  7.         // 空指针异常 
  8.     } 

“但假设有好几个类似 myMethod() 的方法,如果为每个方法都加上 try-catch,就会显得非常繁琐。代码就会变得又臭又长,可读性就差了。”我继续说。

“一个解决办法就是,使用 throws 关键字,在方法签名上声明可能会抛出的异常,然后在调用该方法的地方使用 try-catch 进行处理。”

  1. public static void main(String args[]){ 
  2.     try { 
  3.         myMethod1(); 
  4.     } catch (ArithmeticException e) { 
  5.         // 算术异常 
  6.     } catch (NullPointerException e) { 
  7.         // 空指针异常 
  8.     } 
  9. public static void myMethod1() throws ArithmeticException, NullPointerException{ 
  10.     // 方法签名上声明异常 

“好了,我来总结下 throw 和 throws 的区别,三妹,你记一下。”

1)throws 关键字用于声明异常,它的作用和 try-catch 相似;而 throw 关键字用于显式的抛出异常。

2)throws 关键字后面跟的是异常的名字;而 throw 关键字后面跟的是异常的对象。

示例。

  1. throws ArithmeticException; 
  1. throw new ArithmeticException("算术异常"); 

3)throws 关键字出现在方法签名上,而 throw 关键字出现在方法体里。

4)throws 关键字在声明异常的时候可以跟多个,用逗号隔开;而 throw 关键字每次只能抛出一个异常。

“三妹,这下子清楚了吧?”我抬抬头,看了看三妹说。

“好的,二哥,这下彻底记住了,你真棒!”

本文转载自微信公众号「沉默王二」,可以通过以下二维码关注。转载本文请联系沉默王二公众号。

 

责任编辑:武晓燕 来源: 沉默王二
相关推荐

2021-05-10 11:38:07

Java数组IDEA

2021-06-06 20:56:48

Java内存 intern

2020-10-26 09:36:45

Java变量数据

2020-11-18 09:44:49

Java命名约定

2021-07-03 17:53:52

Java异常处理机制

2021-07-26 17:22:02

Java

2021-06-11 18:08:00

Java字符串拼接

2020-10-29 10:28:31

Java数据类型

2021-07-30 09:32:55

JavaEquals

2020-11-13 10:29:37

流程控制语句

2020-12-09 05:19:35

static关键字Java

2022-02-16 08:26:18

Go并发信号量

2018-03-06 10:46:42

代码Python买水果

2020-11-20 09:36:43

Java对象

2017-06-02 10:25:26

Java异常处理

2015-03-16 16:16:15

JavaJava异常处理Java最佳实践

2016-05-12 09:59:08

2010-09-13 13:25:44

sql server外

2011-09-16 11:08:54

Emacstwitter微博

2013-06-27 09:42:47

编程新手
点赞
收藏

51CTO技术栈公众号