java----异常
<---百草枯--->
qq:916923477--maooam;
异常
1、异常的定义:
就是程序不是按照正常的执行流程而突然终止程序继续往下执行。
2、异常的分类:
2.1、程序运行时出现异常(unchecked Exception),终止程序(把异常报告给用户,这是很要命的事情),在编译时编译器不会对其进行检测,这是未检测异常,属于未检测异常RuntimeException的子类。(“未检查的异常”可在程序中编写代码来将这种异常避免(除0, 越界等))
2.2、在编译程序时出现异常(把异常报告给程序员),在编译时编译器会对其进行检测,如果没有对异常进行处理,就会终止编译,是属于编译时可检测异常(checked Exception),是非RuntimeException的子类。(”已检查异常“如果没有对它进行处理,则在编译时会发生错误(文件,网络等))
3、异常的处理:
3.1、(抛出不做处理)在本方法调用其他方法(该方法可能会有异常产生,而且也抛出了异常)时,如果本函数不想对异常处理,可以继续向上抛出异常,让调用本函数的函数来处理,但这是极其不负责的行为,如果上面的函数又不处理,继续抛出,直到之后都没有函数去处理,这时候是就会抛给系统,系统会直接终止该应用,这时就会把整个异常暴露给用户了,这对程序员是很要命的事清。例如:
|
public class ThrowExceptionDemo{ public static void main(String[] args) throws Exception{ test(); } static void test() throws Exception{ double a=2.0/0; if(String.valueOf(a).equals("Infinity")){ throw new Exception("by zero exception"); } System.out.println(a); } } |
3.2、程序员自己进行捕捉异常(try 、catch、finally)。例如:
|
public class ExceptionExam{ public static void main(String args[]){ int a,b; double c; try{ a = Integer.parseInt(args[0]); b = Integer.parseInt(args[1]); c = a/b; System.out.println(a + "/" + b +" = "+c); }catch(RuntimeException e){ System.out.println(e); } System.out.println("game over."); } } |
4、异常的抛出方式:
4.1、系统抛出:
在java的世界里,大部分的异常都是由系统抛出的。
4.2、由程序员抛出:
程序员自己抛出异常时用到一个关键字是:throw 异常对象。例如:
| static void test() throws Exception{ double a=2.0/0; if(String.valueOf(a).equals("Infinity")){ throw new Exception("by zero exception"); } System.out.println(a); } |
5.1、异常的声明:throws 异常类 (异常类如果是非检查的异常类编译器编译会忽略检查.).
例如:
| static void test() throws Exception{} |
5.2、异常的抛出:throw 异常对象 。例如:
| throw new Exception("by zero exception"); |
6.1、可以对下列情形在方法定义中抛出异常:
方法中调用了一个会抛出“已检查异常”的方法
程序运行过程中发生错误,并且用throws字句抛出了一个“已检测异常”
6.2、 不要抛出如下异常:
从Error中派生的那些异常
从RuntimeException中派生的那些异常,如NullPointerException等。。。
7、异常的生命周期:
捕获一个异常又抛出另一个异常,并把原始异常的信息保存下来,调用栈的信息,异常将沿调用链一直前进,直到被捕获或是程序结束前进。
注意:
异常处理最好只用于错误处理,不应该用于程序业务逻辑,因为异常产生要消耗资源。。
posted on 2013-08-17 00:07 Jason-liang 阅读(252) 评论(0) 收藏 举报
浙公网安备 33010602011771号