throws和throw的区别
2020-05-13 16:08:35来源:博客园 阅读 ()
throws和throw的区别
throws和throw:
throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw:则是用来抛出一个具体的异常类型。
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
分别介绍:
throws在方法后边声明异常,其实就是自己不想对异常做出任何的处理,告诉别人自己可能出现的异常,交给别人处理;
注意:方法名后面跟上 throws Exception 证明这个方法里的语句可能会发生异常,注意是可能!在别处如果调用这个方法时,就必须也抛出异常或者用try catch 处理。 throws是可以单独使用的。
eg:(代码示例01)
public class Test { public static void main(String[] args) throws Exception { Test test = new Test(); /*** 调用的方法里抛出了异常,依然要调用的2种方式 * 1、继续声明异常(此代码块儿为本方式) * 2、用try catch 代码块包住 test.compute() */ test.compute(); } public void compute() throws Exception{ System.out.println("我可能发生异常"); System.out.println("3/0的值为" +3/0); } }
eg:(代码示例02)
public class Test { public static void main(String[] args){ Test test = new Test(); /*** 调用的方法里抛出了异常,依然要调用的2种方式 * 1、抛出异常 * 2、用try catch 代码块包住 test.compute()进行捕获并解决异常(此代码块儿为此方式) */ try { test.compute(); } catch (Exception e) { e.printStackTrace(); System.err.println("除数不能为0"); } } public void compute() throws Exception{ System.out.println("我可能发生异常"); System.out.println("3/0的值为" +3/0); } }
throw:就是自己处理一个异常,有两种方式要么是自己捕获异常try...catch代码块,要么是抛出一个异常(throws 异常)
eg(代码示例01):
package Exception005.usuallyWrong.usuallyWrong01; import java.util.Scanner; /** * 方式1:方法后未加throws Exception,在代码块儿中使用try-catch进行捕获异常,在if选择结构中加入throw,实现了手动异常,方式2:调用方法时继续声明该异常 */ public class ByoneselfThrow { String name; String sex; int age; public void byoneself(){ Scanner input=new Scanner(System.in); System.out.println("请输入你的姓名:"); name=input.next(); System.out.println("请输入你的年龄:"); age=input.nextInt(); System.out.println("请输入你的性别:"); sex=input.next(); try{ if("男".equals(sex)||"女".equals(sex)){ System.out.println("我的名字叫"+name+",年龄为"+age+",性别为"+sex); }else{ throw new Exception("性别只能是男/女!"); } }catch (Exception e){ e.printStackTrace(); } } } class Test{ public static void main(String[] args) { ByoneselfThrow center=new ByoneselfThrow(); center.byoneself(); } }
eg(代码示例02):
package Exception005.usuallyWrong.usuallyWrong01; import java.util.Scanner; /** * 方式1:方法后加throws Exception(声明异常),在if选择结构中加入throw(手动抛出异常),在调用方法时使用try-catch进行捕获并解决异常,实现了手动异常 * 方式2:调用方法时继续声明该异常 */ public class ByoneselfThrow { String name; String sex; int age; public void byoneself()throws Exception{ Scanner input=new Scanner(System.in); System.out.println("请输入你的姓名:"); name=input.next(); System.out.println("请输入你的年龄:"); age=input.nextInt(); System.out.println("请输入你的性别:"); sex=input.next(); if("男".equals(sex)||"女".equals(sex)){ System.out.println("我的名字叫"+name+",年龄为"+age+",性别为"+sex); }else{ throw new Exception("性别只能是男/女!"); } } } class Test{ public static void main(String[] args) { ByoneselfThrow center=new ByoneselfThrow(); try { center.byoneself(); } catch (Exception e) { e.printStackTrace(); } } }
eg(代码示例03):
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,不符合要求"); } } }
总结:throws可以单独使用,throw不可以,必须搭配try catch,或者throws,若程序执行到throw exception 语句,则后面的语句不会再执行。
原文链接:https://www.cnblogs.com/liangbaolong/p/12883613.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- System.out.println()和System.out.print()区别 2020-06-10
- ArrayList是如何实现的,ArrayList和LinedList的区别?Array 2020-05-19
- java基础面试题1 2020-05-19
- 面试被问ReentrantLock的公平锁与非公平锁,区别以及实现 2020-05-12
- 关于Spring、Springmvc、Springboot和SSM之间的区别,这篇文 2020-05-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash