java异常的一些小知识

来源:互联网 发布:ubuntu 挂载命令 编辑:程序博客网 时间:2024/05/16 10:56

         异常,我们软件都需要面对的一个问题。如何让你的软件更加健壮呢?这是一个值得我们考虑的问题。这里主要为大家介绍一下异常是什么,异常是如何产生的,如何将异常抛出,如何捕获异常,对于异常应该如何处理的个人一些见解。

         异常是什么

         单就异常这两个字来说,异常的意思是:1.非正常的;不同于平常的异常现象。在我们代码中,异常指的是,在程序运行时,出现一些不正常的情况,使我们的程序无法正常运行或者对操作系统造成影响,使我们的程序无法得到预期的结果。这就是异常。这里需要说的是,我们的异常,指的是程序在运行时出现的一些问题,比如说你写了一个除法运算,用户将除数设置为了0,那么系统就会抛出异常。

        异常是如何产生的 

         异常产生的原因有很多,比如:除数为零,数组下标越界,读取的文件不存在等,字符类型做运算处理等,这里有很多都是逻辑上的异常。可能是用户输入了一些不合法的数据,但是没有相应的检查机制,于是进行了一些不正常的操作,导致产生了异常。
         异常出现后,程序可以生成一个异常类型的对象,这是系统生成的异常,这就是异常的生成。异常生成后会将异常交给java的运行系统,这是异常的抛出,具体实现下文会有介绍。现在先跟大家分享下编程人员如何自己从代码里生成异常吧,异常生成代码如下:
         
//生成异常的方法void m(int i ) throws ArithmeticException{if (i==0){//生成异常的代码throw new ArithmeticException ("被除数为零");}
        }
         这里的这个方法,当你调用的时候,如果将i传入0 ,那么,就会生成一个异常,并且返回给调用它的类。

         异常如何抛出

//抛异常的类,这里的主函数调用f类,然后通过f类调用m类,这时,m类将异常抛给f类,然后f类将异常接着抛给了主函数。void f(int i) throws ArithmeticException{//调用m类m(i);}//生成异常的方法void m(int i ) throws ArithmeticException{if (i==0){//生成异常的代码throw new ArithmeticException ("被除数为零");}}
         在这里,我们的f类调用了可以生成异常的m类,但是它并没有将m类抛给它的异常解决,而是通过 throws ArithmeticExeption 这个方法,将异常再次抛出,抛给了调用它的类。
         如果调用它的类还是不想或者是不能解决该异常,可以继续用同样的方法将异常抛出。

         如何捕获异常

         异常如何被捕获呢?先向大家展示一段代码:
           
public class TestEx{public static void main (String[] args){int[] arr = {1,2,3};System.out.println(arr[2]);//异常的处理机制try {//有可能出问题的代码System.out.println(2/0);}//捕捉异常catch (ArithmeticException ae){//返回信息,如果出异常后会执行这块的内容System.out.println("系统出异常了,请联系管理员");ae.printStackTrace();}}}
           在这里,我们的软件在运行时,自动生成了一个除数为0 的异常,我们在有可能发生异常的地方写一个try {}catch{}然后将有可能出现异常的代码写入try的括号中,将异常出现后的处理方法写入catch的括号中,如果出现异常的话,程序就可以按照设计人员的想法将异常处理,这样的话,可能就不会再将系统中断,这是异常的好处。
           下面是我们之前说的那个抛出的异常的捕获和处理:感兴趣的小伙伴可以看一下。
public class TestEx{public static void main (String[] args){try {new TestEx().f(0);}catch (ArithmeticException ae){ae.printStackTrace();System.out.println("这是一个抛出了的异常!");}}


           异常处理

           软件出异常是很正常的事,如何将异常捕获并处理这是需要我们考虑的,不是所有异常都是需要用户知情,需要用户知情的也不一定所有异常都要终止软件运行。如何 让软件更加的健壮、人性化。这是设计人员需要考虑的。
           我们可以用多个catch语句去捕捉异常,对于不同的异常提供不同的解决方案,但是需要注意的是:如果异常类有继承关系的话,要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch块可能被执行,否则子类型的catch块将永远无法到达,Java编译器会报错。
           如果我们的程序只要出异常就需要进行某一操作:比如将异常记录。那么我们就可能会用到 finally语句块,它的写法类似于catch,不同之处在于它的括号中的内容肯定会执行。


         

         

0 0
原创粉丝点击