java异常处理——throw与throws的区别
来源:互联网 发布:航班动态查询软件 编辑:程序博客网 时间:2024/05/29 07:28
throws说明在这个方法中可能会抛出的异常,但并不是全部,可以只指出那些需要上级处理的异常,有些异常可以在方法内部就被处理掉了;
throw就是将抛出一个异常,这可能是人为的,也可能是系统抛出的,只要执行了throw就一定会抛出一个异常。
此外还有一些特征:
1)throws只能出现在方法函数头;而throw只能出现在函数体;
2)throws表示出现异常的一种可能性,并不一定会发生这些异常;
throws E1,E2,E3 只是告诉程序这个方法可能会抛出这些个异常,方法的调用者可能要处理这些异常。而这些异常E1,E2,E3可能是该函数体产生的。
而throw是明确之处这个地方要抛出这个异常。
void doA() throws Exception1, Exception3 {
try {
……
} catch(Exception1 e) {
throw e;
} catch(Exception2 e) {
System.out.println("出错了");
}
if (a != b)
throw new Exception3("自定义异常");
}
代码块……中可能产生异常Exception1、Exception2和Exception3。
如果产生Exception1异常,则捕捉了之后抛出由该方法的调用者去做处理;
如果产生Exception2异常,则该方法自己做了处理(打印出了说出错了),所以该方法就不会再向外抛出Exception2异常了,void doA() throws Exception1,,Excpetion3里面的Exception2也就不用写了;
而Exception3异常是该方法的某段逻辑出错,程序员自己作了处理在该段逻辑错误的情况下抛出异常Exception3,则调用者也需要处理。
----------------------
关键字:throw throw是一种控制程序流程的特殊方法而已。没有相应的catch的话,可以中止当前的方法继续执行。
关键字:throws 声明方法时候,如果不声明throws的话,那么一般的Exception都要在这个方法中终结,也就是说一定要有相应的catch处理,否则编译时会产生错误。如果方法声明了throws的话,可以交给上一级方法去处理。以此类推。但是有些Exception可以不加捕捉,编译也会通过。继承Exception类,可以自己定义Exception,对于特定的状态,用throw抛出专用的例外。这对于特定的middle ware开发,有一定帮助。
throws用于声明,它并不是一个可以执行的语句。throws放在方法声明的后面部分,用来说明这个方法可能会抛出什么异常,
static void throwOne() throws IllegalAccessException
这个声明告诉调用者,方法throwOne可能会抛出IllegalAccessException异常。
格式是: 方法声明 throws 异常类1,异常类2,...
而throw则是一个动作,执行throw语句的时候会抛出一个异常。
关键字:try、catch 用个形象的比喻,如果说throws相当于职业介绍中介的话,那try和catch就是一对倒霉的打工仔。很有意思,throws只是告诉编译器--方法可能产生的异常问题,然后把问题处理抛给try和catch。他们一个负责发现异常关系,一个负责异常捕获。很辛苦的一对难兄难弟哦,:)
下面是一个不正确的例子。该例试图引发一个它不能捕获的异常。因为程序没有指定一个throws子句来声明这一事实,程序将不会编译。
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 语句来捕获该异常。
正确的例子如下:
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
- java异常处理——throw与throws的区别
- 异常处理throws与throw的区别
- java基础篇——异常处理throw与throws的区别
- Java异常处理中throw与throws的用法区别
- Java异常throw与throws的区别
- java异常处理的throw和throws的区别
- java异常处理的throw和throws的区别
- java异常处理的throw和throws的区别
- java异常处理的throw和throws的区别
- java异常处理的throw和throws的区别
- Java_基础—throws的方式处理异常/throw和throws区别
- java异常处理中throw和throws的区别?
- 异常处理throw和throws的区别
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
- 【技术】Java入门:详解Java异常处理中throw与throws关键字的用法区别
- java异常的捕获及处理 兼论throws与throw
- 详解Java异常处理中throw与throws关键字的用法区别
- java异常中 throw 与 throws关键字的区别
- mysql 查看已安装的编译参数
- HDU 4313
- 策略模式-商场促销-大话设计模式 .
- 香港天文台为奥运马术赛研制出精确暑热压力计
- 黑马程序员--.Net学习日记——WinForm
- java异常处理——throw与throws的区别
- Jquery上传插件 uploadify v3.1使用说明
- 算法设计与分析课程Part1笔记(3)
- 雨天好睡觉
- 从fread和mmap谈C++读文件的性能
- jquery调用webservices注意事项
- HTML5中快速运用Google Maps JavaScript API V3
- 简单模拟Comparator-策略设计模式-马士兵设计模式教程
- js中 如何声明隐式全局作用域变量