throws和throw抛出异常的使用规则
生活随笔
收集整理的这篇文章主要介绍了
throws和throw抛出异常的使用规则
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
一直对java中的throws和throw不太理解。最近一直在查这两个方面的资料,算是能明白一点吧。如果我下面的观点哪有不对,希望指出来,我加以改进。
throw:(针对对象的做法) 抛出一个异常,可以是系统定义的,也可以是自己定义的。下面举两个例子: 抛出Java中的一个系统异常: public class One { public void yichang(){ NumberFormatException e = new NumberFormatException(); throw e; } public static void main(String[] args){ One test = new One(); try{ test.yichang(); }catch(NumberFormatException e){ System.out.println(e.getMessage()); } } }抛出一个自定义的异常: public class People {public static int check(String strage) throws MyException{int age = Integer.parseInt(strage);if(age < 0){throw new MyException("年龄不能为负数!");}return age;}public static void main(String[] args){try{int myage = check("-101");System.out.println(myage);}catch(NumberFormatException e){System.out.println("数据格式错误");System.out.println("原因:" + e.getMessage());}catch(MyException e){System.out.println("数据逻辑错误");System.out.println("原因:" + e.getMessage());}} } public class MyException extends Exception{private static final long serialVersionUID = 1L;private String name;public MyException(String name){this.name = name;}public String getMessage(){return this.name;} }
throws:(针对一个方法抛出的异常) 抛出一个异常,可以是系统定义的,也可以是自己定义的。 抛出java中的一个系统异常: public class One { public void yichang() throws NumberFormatException{ int a = Integer.parseInt("10L"); } public static void main(String[] args){ One test = new One(); try{ test.yichang(); }catch(NumberFormatException e){ System.out.println(e.getMessage()); } } }
抛出一个自定义异常: public class People { public static int check(String strage) throws MyException{ int age = Integer.parseInt(strage); if(age < 0){ throw new MyException("年龄不能为负数!"); } return age; } public static void main(String[] args){ try{ int myage = check("-101"); System.out.println(myage); }catch(NumberFormatException e){ System.out.println("数据格式错误"); System.out.println("原因:" + e.getMessage()); }catch(MyException e){ System.out.println("数据逻辑错误"); System.out.println("原因:" + e.getMessage()); } } }public class MyException extends Exception{ private static final long serialVersionUID = 1L; private String name; public MyException(String name){ this.name = name; } public String getMessage(){ return this.name; } }
那么下面我要说究竟什么时候用哪种: 如果是系统异常的话可以什么都不用做,也可以针对方法抛出一个异常,因为系统异常是可以被系统自动捕获的,所以这个异常究竟是要在方法内部解决还是交给上层函数去解决其实效果是一样的。但是我查了很多资料,即使会抛出异常能被系统所捕获的话还是建议针对方法写一个throws,因为这样在完成一个大型任务的时候可以让别的程序员知道这里会出现什么异常。 如果是自己定义的异常,则必须要用throws抛出该方法可能抛出的异常,否则编译会报错。
转载于:https://www.cnblogs.com/13224ACMer/p/4926106.html
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的throws和throw抛出异常的使用规则的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 从移动端开发者的角度聊微软的困境和机会
- 下一篇: img元素高度多出来的几像素