JAVA中的异常-知识整理

    技术2022-07-11  123

    学了JAVA数组之后,开始整理一下异常的部分; JAVA相比于C语言多了异常处理部分,于我而言的话,学习异常的时候总有一个问题,为什么能用if-else处理的问题,非要再用一个新模块异常来解决。 之后在看书的时候明白了这个问题的答案,同样分享出来; 首先看下面这个伪语言描述的例子,这是伪代码不能运行的;

    openTheFile; determine its size; allocate that much memory; read-file; closeTheFile;

    他的功能是打开文件,读取内容,读完关闭文件; 根据文件的大小分配内存空间。 如果在没有学习异常的时候,我们要让程序变得perfect; 就要进行条件判断;

    openTheFile; if(theFilesOpen) { determine the length of the files; if(gotTheFileLength) { allocate that much memory; if(gotEnoughMemorry) { read the file into memoory; if(readField) { errorCode=-1; } else { errorCode=-2; } } else { errorCode=-3; } } else { errorCode=-4; } } else { errorCode=-5; }

    可以看出这段代码增加了很多判断语句,目的是保证在前一步正确的情况下再执行下一跳语句,是不是很繁琐,那如果用异常的话应该怎么处理呢; 先看知识点,最后结尾再看一下异常如何处理;

    这里不太多复述基础知识点,直接看重点;

    一、try-catch处理异常;

    我们用例子来说明:

    int i=4; int arr[]= {1,2,3,4}; try { System.out.println(arr[i]); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("下标越界"); } }

    这里我们定义了一个大小为4的数组arr; 我们知道arr【4】这个元素是不存在的,如果我们输出的话JAVA会给你报一个异常,所以我们就用这种方法来处理异常; 看代码: try中的部分是有可能出现异常的代码部分; catch中,括号内是抛出的异常,例子中就是下标越界的异常; 然后大括号里面要怎样处理异常的代码部分; 最后也可以加一个finally{};就是最后执行的代码;

    JAVA中为了方便给了我们一些公用的异常(也就是catch中括号里面的部分);

    二、公共异常

    1,ArithmeticException 整数除法除数为0的异常; 2,NullPointerException 对象没有实例化,访问该对象时的异常; 3,ArrayIndexOutOfBoundsException 数组下标异常(例子中的就是) 4,FileNotFoundException 存取一个不存在的文件时的异常; 5,IOException 通常的I/O错误引发的异常

    当然还有一些其他的,我只是拿出了几个比较典型的,如果有需要得自己查阅资料了;

    三、抛出异常和自己创建异常;

    有些时候,我们要自己定义一些范围或者类型,那在JAVA中是不报错也不报异常的,比如说矩阵的相乘需要第一个行数等于第二个的列数,JAVA是不会管你是不是相等(雨我无瓜); 这个时候我们就要用到自己创建异常了;

    还是,我们用例子来说明; 首先我们新建一个类MyException;

    public class MyException extends Exception{ public String toString() { return "对不起,报异常了"; } }

    我们让这类继承于Exception这个父类; 然后重写类的toString函数;

    然后再建一个类,我用的是以前的就不要在意名字了;

    public class Array{ static public void compute(int a) throws MyException { if(a<5) { System.out.println(a); } else { throw new MyException(); } } }

    我们在这个类中写了一个compute函数,函数里有一个int型的参数,然后呢; 记住在后面加上throws MyException; 我们在函数里面判断,如果参数小于5; 我们就输出这个参数; 反之的话,我们就抛出MyException这个异常; 这样这个函数就写完了;

    然后来到主函数;

    public static void main(String[] args) { Array a=new Array(); try { a.compute(10); } catch(MyException e) { System.out.println(e); } }

    我们创建对象后,调用compute函数,参数给的10>5; 运行后控制台会输出“对不起,报异常了”。 这个就是我们自己写的异常; 关于基础的自定义异常的步骤基本就这三部; 至于其他更复杂的就要自己去尝试并学习了;

    然后回过头来说最开始的那地方; 如果用try-catch处理的话,应该会了吧;

    try { openTheFile; determine its size; allocate that much memory; read-file; closeTheFile; } catch() {} catch() {} catch() {}

    就像这样的代码了,是不是的确更清楚而且代码量也会变少; 关于异常,就说这些,OK; 结束; END;

    Processed: 0.025, SQL: 9