异常处理

一、   异常的概念

异常:运行时发生的错误称为异常。

         eg:数组下标越界

             文件不存在

             除数为0....

 

  异常处理:处理这些异常就称为异常处理。

  一旦引发异常,程序将突然中止,且控制将返回操作系统。

 

二、   异常处理的方法

Java中异常处理机制如下

   1.Java程序的执行过程中,如果出现了异常事件,就会生成一个 异常对象。

 

   2.生成的异常对象将传递给Java运行时系统(JRE),这一异常的产生和提交过程称为“抛出(throw)异常”。

 

   3.JRE得到一个异常对象时,它首先寻找处理此异常的代码。如果找到能够处理这种类型异常的方法后,JRE把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。

 

   4.如果JRE找不到可以捕获异常的方法,则JRE将终止,相应的Java程序也将退出。

 

 

Error

   一般不能由应用程序直接处理,必须交由操作系统处理。(硬件原因造成的运行错误)

 

Exception

            运行时异常

                    RuntimeException的子类异常。Java编译器允许程序不对它们做出处理。

            非运行时异常

                    除了运行时异常之外的其他由Exception继承来的异常类。Java编译器要求程序必须捕获                    或声明这种异常,否则编译就报错。

 

三、   Try、catch、finally、throws、throw五个关键字

Java 中可用于处理异常的两种方式:

    自行处理:可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。

    回避异常:在方法声明中包含 throws 子句,通知潜在调用者,如果发生了异常,必须由调用者处理。

 

   try...catch

   形式一:最基本的异常处理

    try{

        可能发生异常的代码块;

    }catch(Exceptione){

             异常处理

    }

            

             补充:

                       catch块中的异常处理一般有两种形式

                                1.System.err.println();输出异常信息

                                2.e.printStackTrace();建议使用这种

 

   finally

   形式二:如果有些代码无论发生什么情况都需要执行,可以把这些代码放到finally块中

             例如:数据库的关闭,网络的关闭等等....

    try{

        可能发生异常的代码块;

    }catch(Exceptione){

             异常处理代码块;

    }finally{

             一定需要执行的代码块;

    }

 

  

   注意:多重catch时,异常子类一定要位于异常父类之前

    try{

                     …...

    }catch(Exception e) {

             ……

    }catch(ArrayIndexOutOfBoundsException e) {//此处报错,因为前面catch可以捕获所有异常,此处代码没用

                     ……

    }

 

 

   throws throw

 

   public class TestException {

             publicstatic void main(String[] args){

                       System.out.println("Hello");

                       try{

                                thrownew Exception("自己显示抛出的异常");//显示抛出异常

                       }catch (Exception e) {

                                e.printStackTrace();

                       }

             }

    }

 

 

    importjava.io.*;

    public classTest1 {

             publicstatic void fun() throws FileNotFoundException{

             //fun()方法中,会有异常,但是它抛出了异常,此异常给到调用他的方法处理。

                       FileInputStreamfis = new FileInputStream("D:\\1.txt");

             }

             publicstatic void main(String[] args){

                       try{

                                fun();//main方法中调用了fun(),必须要处理fun()中抛出的异常

                                      //main方法可以继续抛出(给到虚拟机处理),也可以用try...catch捕获

                       }catch (FileNotFoundException e) {

                                //TODO Auto-generated catch block

                                e.printStackTrace();

                       }

             }

    }

 

四、   自定义异常

JavaAPI提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义异常

 

   自定义异常需要继承Exception 及其子类

 

 

   案例:

    classMyException extends Exception{/自定义异常

             publicMyException(){

                       super("我自己定义的异常!");

             }

    }       

    public classTestException {

             publicstatic void main(String[] args){

                       try{

                                thrownew MyException();

                       }catch (Exception e) {

                                //TODO Auto-generated catch block

                                e.printStackTrace();

                       }

             }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值