• Java和.net的异常处理


    所谓的异常就是指在程序运行当中所发生的不正常事件,它会中止程序的运行,导致异常的的发生主要来自

    Ø         代码错误,包括语法错误,逻辑错误,这些都是开发人员造成的

    Ø         资源不可以,这是由系统访问了未经授权的资源而引起的错误

    Ø         在.net中,公共语言运行库也就是在clr内部也会引发异常

    异常和错误有很大的区别,就好像你开车从A地到B地,如果中间的路坏了,没法走了,这就是异常,中止了我们开车行走,所有需要处理一下就好了,如果是车坏了,那么你根本就没办法开车去,就好像程序里你编译都通不过那样

    异常处理是很必要的,原因有一下几点:

    1 为了防止程序的崩溃,中止运行

    2 使程序更加严谨,也是防止数据库结构泄露

    3 一种友好的提示

    4 使程序员中能够很快的找到错误的根源,以便解决问题

    那么怎样才能处理这样的异常呢,换句换话说我们如何进行异常处理呢 现在我们分别来看看在java和.net中是如何处理的:

             Java在java中我们主要通过5个关键字来实现的

    ü         Try:    包含着可能发生异常的代码

    ü         Catch:  用来捕获和处理异常

    ü         Finally: 无论是否发生异常,finally中的代码都要执行,但是假如ry中发生的异常和catch   当中不匹配,finally中的代码将不被执行,因为try直接中止的了程序的行!

    ü         Throws: 总是出现在方法的声明中,用来表明该方法可能抛出的异常 (异常的类名)

    ü         Throw:  总的出现在方法体中,用来抛出一个异常,是为了让调用该方法人能够及 

    的捕捉异常,通常和throws或try…..catch一起使用,抛出的是用new关键字申明的异常的对象

       Java中的异常主要在java.lang包中的 所以lang包不用导入直接写上可能发生异常的异常名就可以了!!异常的根是Exception,其他的异常都是继承它而来的,是它的子类:

    以下是一些常见的异常:

    ²        ArithmeticException:算术错误,比如除数为0

    ²        ArrayIndexOutBoundException:数组大于或小于实际数组的大小

    ²        NullPointExceoption:所谓的空指针异常,试图访问null对象的成员

    ²        ClassNotFoundException:不能加载所需的类

    ²        InputMismatchException:欲得到的数据类型与输入的数据类型不匹配

    ²        IllegalArglumentException:方法接收到的参数错误

       先看一个例子

     package com.exception.hnaccp;

    public class Text {

       

        public static void main(String[] args) {

           // TODO Auto-generated method stub

            try{

            compter();

            compterLength("shen");

            }catch(ArithmeticException ex)

            {

            System.out.print(ex.getMessage());

            }

            catch(IllegalArgumentException ee)

            {

            System.out.print(ee.getMessage());

            }

        }

        static void compter()

        {

        try

        {

        if(6/0==5)

        {

            System.out.print("----");

        }

        }catch(ArithmeticException ex)

        {

            throw new ArithmeticException("除数不能为0");

        }

        }

        static void compterLength(String str)throws IllegalArgumentException

        {

        if(str.length()==6)

        {

            System.out.print("OK");

        }else

        {

            throw new IllegalArgumentException("字符串输入不正确");

        }

        }

    }

    看到上面的这段代码不知道你得到了什么?

       首先看看方法一compter() 像这样的问题我们要直接用try....catch去处理,因为很明显,执行到if语句块时立马会出现异常,而这种异常是系统有的,会导致程序的终止,所以我们要及时的用catch去处理,是抛出还是其他的处理方式,要看情况而定了

       其次在来看看方法二compterLength(String str) 输入的参数错误,就会导致if中的语句块不被执行,但是,系统不会马上抛出什么异常,因为语法,逻辑都没什么错误,只不过参数输入错误,导致方法不起作用罢了,为了防止这样的问题,并让调用者知道错误的根源,我们要造出一个异常,并让它抛出或用try ...catch去处理即可,由于if语句块不执行,那么我们就在else中抛出处理异常就可以了

       最后还要注意的就是在调用方法是时候catch中的异常要不是方法中抛出的很明确的那个很有可能发生的异常,要不就是他们的父类Exception,方法中抛出的异常也要和catch()中的相匹配,或者在方法名后声明抛出的异常,否则将会退出方法引发其他的异常或编译错误,多重catch的时候Exception一定要放在最后,否则后面的将不会被执行

    另外,自己也可以自定义异常,继承父类Exception即可,可以重写父类的各个方法

       public class MyException extends Exception

        {

       public String getMessage(){

           return "自定义异常错误";

       }

    }

     

    MyException就是自定义的异常,重写了Exception的getMessage方法,当然了,也可以重写Exception当中其他的方法!

            .Net

          .net中的异常处理和java很相似,他们之间也存在着一些差别,在.net中对于异常的处理没有throws,不需要在方法后声明异常,而java有的时候则需要,其他的大部分都一样

          在.net中我们把所发生的异常分成两类

               用户程序执行所发生的异常,派生于ApplicationException 类

               公共运行库引发的异常,派生于SystemException 类

     

    其实说起来异常处理机制很简单,对于可能会出现异常的部分,进行捕捉,处理就ok了,如果不想处理或者说不能在当前处理,我们可以通过throw抛出异常:throw new Exception或者是throw e;留给调用者进行处理

    上面简单的介绍了以下关于异常的一些问题 但是需要注意的是 异常处理try...catch不宜多用,会影响程序运行的效率,建议没必要用的时候最好不要使用,我们可以通过判断,

    尽量让这种异常不出现或者是通过其他方式给用户提示,像用户造出的异常,如compterLength(String str) 我们就没必要使用了,用一个else给用户提示一下就OK了,总之,看情况而定吧。

    补充:在开发大型项目的时候,有时候需要使用框架和架构,比如三层中,数据访问层的异常,我们都会选择抛出,然后让调用这个方法的方法B去处理,如果它不处理,就由调用B这个方法的方法去处理,以此类推....

    多思考,多创新,才是正道!
  • 相关阅读:
    XML 特殊字符
    asp.net Application、 Session、Cookie、ViewState、Cache、Hidden 的区别
    Oracle 和 SqlServer 的区别
    TFS源代码管理的8大注意事项
    json 排序
    网页中内容的显示问题
    e.target与事件委托简例(转)
    form 中的 table元素过滤定位事件
    (转) Ajax 重定向
    Django ajax post 403 问题
  • 原文地址:https://www.cnblogs.com/shuang121/p/1970674.html
Copyright © 2020-2023  润新知