探讨throw、throws 、try/catch 作用区别
来源:互联网 发布:中国的动漫公司知乎 编辑:程序博客网 时间:2024/06/05 10:48
在学习java异常处理的时候,总是被这几个关键字搞的晕头转向,爬到网上找了些帖子和例子,好好理解一下他们的作用与区别:
关键字:throw throw是一种控制程序流程的特殊方法而已。没有相应的catch的话,可以中止当前的方法继续执行。
关键字:throws 声明方法时候,如果不声明throws的话,那么一般的Exception都要在这个方法中终结,也就是说一定要有相应的catch处理,否则编译时会产生错误。如果方法声明了throws的话,可以交给上一级方法去处理。以此类推。但是有些Exception可以不加捕捉,编译也会通过。继承Exception类,可以自己定义Exception,对于特定的状态,用throw抛出专用的例外。这对于特定的middle ware开发,有一定帮助。
关键字:try、catch 用个形象的比喻,如果说throws相当于职业介绍中介的话,那try和catch就是一对倒霉的打工仔。很有意思,throws只是告诉编译器--方法可能产生的异常问题,然后把问题处理抛给try和catch。他们一个负责发现异常关系,一个负责异常捕获。很辛苦的一对难兄难弟哦,:)
下面是一个不正确的例子。该例试图引发一个它不能捕获的异常。因为程序没有指定一个throws子句来声明这一事实,程序将不会编译。
- // This program contains an error and will not compile.
- class ThrowsDemo {
- static void throwOne() {
- System.out.println("Inside throwOne.");
- throw new IllegalAccessException("demo");
- }
- public static void main(String args[]) {
- throwOne();
- }
- }
为编译该程序,需要改变两个地方。第一,需要声明throwOne( )引发IllegalAccessException异常。第二,main( )必须定义一个try/catch语句来捕获该异常。
正确的例子如下:
- // This is now correct.
- class ThrowsDemo {
- static void throwOne() throws IllegalAccessException {
- System.out.println("Inside throwOne.");
- throw new IllegalAccessException("demo");
- }
- public static void main(String args[]) {
- try {
- throwOne();
- } catch (IllegalAccessException e) {
- System.out.println("Caught " + e);
- }
- }
- }
下面是例题的输出结果:
inside throwOne
caught java.lang.IllegalAccessException: demo
区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;
throw语法:throw <异常对象>
在方法声明中,添加throws子句表示该方法将抛出异常。如果一个方法会有异常,但你并不想处理这个异常,就在方法名后面用throws,这样这个异常就会抛出,谁调用了这个方法谁就要处理这个异常,或者继续抛出.
throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
其中:异常类可以声明多个,用逗号分割。
区别二:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使用,然后再由处理异常的方法捕获。
联系一:try .... catch 就是用catch 捕获 try 中的异常,并处理;catch是捕获异常。也就是说某一个操作有可能会抛出什么异常。throw 就是不处理异常,直接抛出异常
调用一个会throws exception的方法(在方法定义的时候可以用throws实现)时,需要把这个方法放在try里,然后用catch破获这个exception,做相应的处理。
throw new exception()是抛出一个exception,由别的method来破获它。
也就是说try....catch是为破获别人的exception用的,而throw是自己抛出exception让别人去破获的。
public void input() throws Exception
{ }
public void outputException()
{
try {
input();
}
catch(Exception e)
{
System.out.println("Exception");
}
}
简单的说,如果一个方法中用了throws,那么这个方法会向上抛出一个异常,那么在调用这个方法的时候必须把这个调用放在try...catch块里处理这个异常。
对于异常有两种处理方法
1、要么声明异常,也就是在方法名后面加上throws exceptionname,..., 方法本身只是抛出异常,由函数调用者来捕获异常。 若产生异常,异常会沿着调用栈下移,一直找到与之匹配的处理方法,若到达调用栈底仍未找到,程序终止。
2、要么捕获异常。通过try catch方法,catch子句中放置处理异常的语句。
联系二:对于会觉得会有异常抛出的程序块,用try{}包住,然后用catch来抓住这个异常,在catch中对异常做处理, 在try中如果有异常的话,程序会转到catch而不会中断,通常这两个是配合使用的,如果你不想因为程序有错,而抛出一大堆异常的话,你就把该程序try起来,try和catch只能获取程序运行时引发的异常,而throw语句可以引发明确的异常,程序到了throw语句这后就立即停止,不会执行后面的程序,
- 探讨throw、throws 、try/catch 作用区别
- 探讨throw、throws 、try/catch 作用区别
- try throw throws catch finally区别
- Java throw throws try...catch区别
- try-catch和throw,throws的区别
- try-catch和throw,throws的区别
- java throw throws try catch
- try catch finally throw throws
- try/catch、throws和throw
- try catch和throws 和throw的区别和联系
- try catch和throws 和throw的区别和联系
- 讨论try...catch和throw,throws的区别和联系
- try-catch和throw,throws的区别和联系
- try-catch和throw,throws的区别和联系
- try-catch和throw,throws的区别和联系
- try-catch和throw,throws的区别和联系
- try-catch和throw,throws的区别和联系
- try-catch和throw,throws的区别和联系
- HDU 1541_Stars
- 十大Intellij IDEA快捷键
- C++简易接口示例
- 可以用 Python 编程语言做哪些神奇好玩的事情
- 快速破解IDEA(2017)
- 探讨throw、throws 、try/catch 作用区别
- mfc程序运行过程
- 递归三要素
- 设计模式--工厂方法模式
- android源码下可执行的一些命令
- 关于程序员的自我提升
- OpenCV-Python教程(10、直方图均衡化)
- JZOJ 100035【NOIP2017提高A组模拟7.10】区间
- Session共享的几种不同实现方案