java怎么抛出异常:两种关键字实操写法

java怎么抛出异常分为两种写法,throw用于方法体内主动抛出异常实例,throws写在方法声明处向上传递异常;受查异常必须搭配throws声明或者try-catch捕获,运行时异常仅用throw即可,不需要额外声明,仅在自定义业务报错、参数校验场景用throw主动抛出,底层IO、网络调用等原生异常优先用throws向上抛给调用层处理;如果是JDK8及以上版本,多异常声明可以用逗号分隔,不要把throw写在方法声明位置,也不能抛出非Throwable子类的普通对象。

throw主动抛出异常

你把代码写在方法内部,先new异常对象,再用throw抛出,抛出后后续代码不会执行。

示例代码:if(num<0){thrownewIllegalArgumentException("数值不能为负数");}

如果抛出的是IOException这类受查异常,必须在方法头加上throws声明;如果是NullPointerException这类运行时异常,不用额外声明,JVM会自动接收异常。

throws向上声明抛出异常

throws写在方法参数括号之后,用来告诉调用者,当前方法可能产生某类异常,自身不做捕获处理,直接把异常向上传递。

单个异常写法:publicvoidreadFile()throwsIOException;多个异常用逗号隔开:throwsIOException,FileNotFoundException。

调用带有throws声明的方法时,要么用try-catch捕获异常,要么继续在当前方法上加throws继续向上抛出,一直抛到main方法。

throw与throws核心区别对比

对比项throwthrows
书写位置方法体内部方法声明头部
作用对象抛出单个异常实例对象声明多个异常类型
使用场景参数校验、自定义业务报错原生IO、网络异常向上传递
语法数量一次只能抛出一个异常可以同时声明多种异常

边界限制与注意事项

受查异常必须被处理,这是Java语言规范里的强制要求,不能只写throw而不做捕获或声明,否则编译器直接报错。

你不能在finally代码块里使用throw抛出受查异常,容易造成异常覆盖,多数业务开发场景都会规避这种写法。

不要在条件永远为false的代码块里写throw语句,编译器会判定代码无法到达,直接编译失败。

完整可直接运行的代码示例

publicclassTestException{publicstaticvoidcheckAge(intage)throwsException{if(age<18){thrownewException("年龄未满18岁");}}publicstaticvoidmain(String[]args){try{checkAge(16);}catch(Exceptione){System.out.println(e.getMessage());}}}

这段代码同时用到throw抛出异常和throws声明异常,调用方用try-catch完成捕获,符合Java异常抛出的标准写法。

敬慕百科汇集百科知识与游戏文化,带你发现世界的每一个精彩角落。

想要了解更多关于java怎么抛出异常的文章欢迎访问:百科