java异常中throw和throws的区别及说明
java异常throw和throws的区别
throws和throw
throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。
- 用在方法声明后面,跟的是异常类名
- 可以跟多个异常类名,用逗号隔开
- 表示抛出异常,由该方法的调用者来处理
- throws表示出现异常的一种可能性,并不一定会发生这些异常
throw:则是用来抛出一个具体的异常类型。
- 用在方法体内,跟的是异常对象名
- 只能抛出一个异常对象名
- 表示抛出异常,由方法体内的语句处理
- throw则是抛出了异常,执行throw则一定抛出了某种异常
分别介绍
throws在方法后边声明异常,其实就是自己不想对异常做出任何的处理,告诉别人自己可能出现的异常,交给别人处理,然别人处理
package com.xinkaipu.Exception; class Math{ public int div(int i,int j) throws Exception{ int t=i/j; return t; } }
public class ThrowsDemo { public static void main(String args[]) throws Exception{ Math m=new Math(); } }
throw:就是自己处理一个异常,有两种方式要么是自己捕获异常try...catch代码块,要么是抛出一个异常(throws 异常)
package com.xinkaipu.Exception; public class TestThrow { public static void main(String[] args) { try { //调用带throws声明的方法,必须显式捕获该异常 //否则,必须在main方法中再次声明抛出 throwChecked(-3); } catch (Exception e) { System.out.println(e.getMessage()); } //调用抛出Runtime异常的方法既可以显式捕获该异常, //也可不理会该异常 throwRuntime(3); } public static void throwChecked(int a)throws Exception { if (a > 0) { //自行抛出Exception异常 //该代码必须处于try块里,或处于带throws声明的方法中 throw new Exception("a的值大于0,不符合要求"); } } public static void throwRuntime(int a) { if (a > 0) { //自行抛出RuntimeException异常,既可以显式捕获该异常 //也可完全不理会该异常,把该异常交给该方法调用者处理 throw new RuntimeException("a的值大于0,不符合要求"); } } }
解析java中的throw和throws关键字
throws关键字
1.1 作用
向上抛异常,把异常交给调用处处理,实际上自身并没有处理异常。
1.2 原理
一旦方法体出现异常,仍会在异常代码出生成一个异常类的对象,当此对象满足throws后的异常类型时,就会被抛出,异常代码后续的代码,均不执行。
1.3 如何用
- 1.3.1 语法
访问权限修饰符 返回值类型 方法名(形参列表) throws 异常类型(异常类){ //实际书写的位置是形参列表的最后一个括号后面 } //出现编译时异常,又不想自己处理,那就可以考虑向上抛出异常
- 1.3.2 示例代码
package Work; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class TestDog { public static void main(String[] args) { try { f1(); } catch (Exception e) { System.out.println("处理了"); System.out.println(e.getMessage()); } System.out.println("后面的代码"); } public static void f1() throws FileNotFoundException { FileOutputStream fileOutputStream=new FileOutputStream("d:\\bc.md"); //只要处理了异常,后面的代码都会顺利执行 System.out.println("执行了没有"); } }
- 1.3.3 示例代码运行截图
throw关键字
2.1 作用
手动制造一个异常,不符合条件的时候我们可以考虑去抛出一个异常,在调用处对异常进行逻辑的处理
2.2 如何用
- 2.2.1 语法
访问权限修饰符 返回值类型 方法名(形参列表) { throw new Exception("展示的异常信息"); }
- 2.2.3 示例代码
Dog类
package Work; public class Dog { private String name; //名字 private String type; //类型 private int age; //年龄 public Dog() { } public Dog(String name, String type, int age) throws Exception{ this.name = name; this.type = type; setAge(age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getAge() { return age; } public void setAge(int age) throws Exception{ if(age<0||age>10){ throw new Exception("年龄非法"); } this.age = age; } }
Test类
package Work; public class Test{ public static void main(String[] args) { try { Dog d1=new Dog("旺财","哈士奇",-9); } catch (Exception e) { //输入有误就打印异常信息 System.out.println(e.getMessage()); } System.out.println("后面的代码"); } }
- 2.2.4 示例代码运行截图
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
maven springboot如何将jar包打包到指定目录
这篇文章主要介绍了maven springboot如何将jar包打包到指定目录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12java静态工具类注入service出现NullPointerException异常处理
如果我们要在我们自己封装的Utils工具类中或者非controller普通类中使用@Autowired注解注入Service或者Mapper接口,直接注入是报错的,因Utils用了静态方法,我们无法直接用非静态接口的,遇到这问题,我们要想法解决,下面小编就简单介绍解决办法,需要的朋友可参考下2021-09-09java自定义ClassLoader加载指定的class文件操作
这篇文章主要介绍了java自定义ClassLoader加载指定的class文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-02-02
最新评论