java的异常处理

    xiaoxiao2023-11-13  143

    1.对异常的定义

      在程序运行期间,出现了不正常的情况,统称为异常。

    2.分类

        java对异常做了分类,所有的异常的根为java.lang.Throwable,Throwable下又派生了2个子类,分别是Error和Exception

    Error:一般是指和虚拟机相关的问题。如内存溢出,操作系统出错,虚拟机错误等。对于这类错误导致的应用程序中断,仅靠程序本身无法恢复和预防,建议让程序终止Exception:在程序中可以通过代码的形式捕获且可能恢复,遇到这种异常,应该尽可能处理异常,使程序恢复正常运行。Exception类中分为运行时异常(RuntimeException)和受检查的异常(CheckedException)。   运行时异常(RuntimeException):编译能通过,程序不会处理这类异常,但是程序一运行就会终止。  受检查的异常(CheckedException):编译不能通过,程序员必须显示用try...catch处理或用throws声明继续抛给上层调用方法处理 ,该程序在编译时就会发生错误无法编译,这体现了java的设计哲学:没有完善错误处理的代码根本没有机会被执行。      

             

    程序示例:

    public abstract class Demo03 { public static void main(String[] args) { try{ System.out.println(8/0); System.out.println("123"); }catch(Exception e) { System.out.println("异常已被捕获"); }finally { System.out.println("finally到此一游"); } } }

    输出结果:

    3.常见的几种RuntimeException

     1) ArithmeticException    数学异常       2) OutofMemoryError  内存超界异常       3) ArrayIndexOutOfBoundsException 数组下标越界异常       4) NullPointerException 空指针异常       5) ArrayStoreException   数组存储异常(数组斜变)       6) StringIndexOutOfBoundsException  字符串下标越界异常          7) NumberFormatException  数字格式化异常       8)  Iillegal ArgumentException非法情节异常       9) InputMismatchException   输入不匹配异常

    代码示例:

    public abstract class Demo03 { public static void main(String[] args) { try{ /*int[] a=new int[7]; a[-1]=3;*/ /*String str=null; str.charAt(0);*/ /*String s="abc"; s.charAt(4);*/ /*String[] s2=new String[8]; Object[] b=s2; b[0]=1;*/ String ss="123a"; int num=Integer.parseInt(ss); System.out.println(8/0); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("数组下标越界异常"); }catch(NullPointerException e) { System.out.println("空指针异常"); }catch(StringIndexOutOfBoundsException e) { System.out.println("字符串下标越界异常"); }catch( ArrayStoreException e) { System.out.println("数组存储异常"); }catch( NumberFormatException e) { System.out.println("数字格式化异常"); }catch(Exception e) { System.out.println("异常已被捕获"); } } }

    4.自定义异常

      手动引发异常不是没事找事,是有原因的,是因为系统内置的异常类不能完全满足我们的要求 。

    public abstract class Demo03 { public static void main(String[] args) { String blood="f";//血型 blood=blood.toUpperCase(); if(blood.equals("A")||blood.equals("B")||blood.equals("O")||blood.equals("AB")){ System.out.println("你是一个正常人"); }else{ throw new RuntimeException("血型判断出错"); } } }

    输出结果:

    5.throw和throws的区别

    throw:throw用在方法体内,表示具体向外抛出异常的动作,它抛出的是一个异常的实例,由该方法的调用者进行异常的处理,执行throw一定是抛出了某种异常。

    throws:throws用在方法声明后,主要声明这个方法会抛出某种类型的异常,让它的使用者知道,需要捕获的异常的类型,表示出现这一种异常的可能性,并不一定会发生这种异常。

     

    6.final、finally、finalize的区别

    final:用来声明属性的不可变,方法不可覆盖,类不可继承。

    finally:是异常处理语句的一部分,表示总是执行。

    finalize:是Object类的一个方法,当垃圾收集确定没有对该对象的更多引用时,由对象上的垃圾收集器调用。

     

    最新回复(0)