• 异常


    一.什么是异常

       1.1 代码中发生的异常情况的对象

        1.2 处理方式:自己处理或者传递该异常

        1.3 产生的原因:①java运行时系统产生-->违反语言规范或超出java执行环境限制的基本错误;

                                 ②手工代码产生-->报告方法调用程序的出错状况

         1.4异常处理通过:try(可能会出错的代码放入try块中,相当于监视器)、catch(捕捉和try类型一致的异常并且处理)、throw(手动抛出异常)、throws(任何被抛出方法的异常都必须通过throws)、finally(任何方法返回前绝对被执行的代码放置在此)

         1.5 一个异常被抛出,必须被一个异常处理程序捕捉并且被立即处理

          1.6 任何不是被你程序捕获的异常最终都会被该默认处理程序处理(默认处理程序:打印异常发生处的堆栈轨迹并且终止程序)

    二.异常类型图

    三.try/catch的使用

     1 /**
     2  * try/catch的使用:一.自己处理的好处:①允许修正错误②防止程序自动终止-->系统默认处理程序会中断程序运行
     3  *                二.指定永远不会从catch块"返回"到try块
     4  *                三.try/catch必须在同一个大块中
     5  * @author 罗摩衔那
     6  *
     7  */
     8 public class Test02 
     9 {
    10    public static void main(String[] args) 
    11    {
    12     int a=0,b=10;
    13     try 
    14     {
    15         b=b/a;
    16         System.out.println("This will not be ptinted");
    17     } catch (ArithmeticException e) 
    18     {
    19         System.out.println("Division by Zero");        
    20     }
    21     System.out.println("After catch statement");
    22    }
    23 }

     

    四.throw的使用

     1 /**
     2  * throw的使用-->异常抛出
     3  *   原则:1.执行throw后try块里面的任何语句不执行
     4  *       2.最紧紧包围的try块用来检查它是否含有一个与异常类型匹配的catch语句.
     5  *       如果发现了匹配的块,控制转向该语句;否则,次包围的try块来处理
     6  *       3.如果没有发现匹配的catch块,默认异常处理程序中断程序的执行并且打印堆栈轨迹
     7  * @author 罗摩衔那
     8  *
     9  */
    10 public class Test03
    11 {
    12   public static void main(String[] args) 
    13   {
    14     try {
    15         demo();
    16     } catch (NullPointerException e) {
    17         System.out.println("Cayght outside");
    18         System.out.println(e);//被处理的外部异常
    19     }
    20   }
    21 
    22     private static void demo() 
    23     {
    24         try {
    25             //执行throw后try块里面的任何语句不执行
    26             throw new NullPointerException("demo");
    27         } catch (NullPointerException e) {//异常类型匹配的catch语句捕捉异常
    28             System.out.println("Catght inside");
    29             throw e;//再次抛出异常,由外层catch处理
    30         }
    31     }
    32 }

     五.throws的使用

     1 /**
     2  * throws子句列举了可能抛出的所有类型异常
     3  * 如果不在①中声明所有可抛出的类型异常,就无法捕捉异常,程序就不会编译
     4  * @author 罗摩衔那
     5  *
     6  */
     7 public class Test04
     8 {
     9   public static void main(String[] args) 
    10   {
    11     try {
    12         demo();
    13     } catch (Exception e) {
    14       System.out.println(e);
    15     }
    16   }
    17 
    18 private static void demo()throws IllegalAccessException//①一个方法可以抛出的所有其他类型的异常必须在throws子句中声明
    19  {
    20     System.out.println("inside");
    21     throw new IllegalAccessException("demo");
    22  }
    23 }

     六.finally的使用

     1 /*
     2  * finally的使用:无论程序是否发生异常都要执行
     3  *              放置在try/catch位置上
     4  */
     5 public class Demo_Finally 
     6 {
     7   public static void main(String[] args) 
     8   {
     9      try {
    10         System.out.println("inside demo");
    11         throw new NullPointerException();//抛出异常
    12     } catch (NullPointerException e) {//捕获同类型异常
    13         System.out.println("异常捕获: "+e);
    14     }finally {
    15         System.out.println("进入finally代码块");
    16     }
    17      System.out.println("程序末尾");     
    18   }
    19 }

    七.自定义异常

     1 public class Test07
     2 {
     3   public static void main(String[] args) 
     4   {
     5     Test07 t=new Test07();//定义类型对象
     6     try {
     7         t.regist(-1);//对象调用方法
     8     } catch (MyException e) {//外层捕捉异常且处理异常
     9         System.out.println("出现错误!错误原因:"+e.getMessage());
    10     }
    11   }
    12 
    13     private void regist(int num)throws MyException//方法中声明抛出任何异常
    14     {
    15         if(num<0)
    16         {
    17             //抛出异常传递给外层处理
    18             throw new MyException("人数为负数",2);//传入异常报错的提示信息
    19         }
    20     }    
    21 }
    22 
    23 class MyException extends Exception//自定义异常继承Exception异常
    24 {
    25     private int id;
    26     
    27     public MyException(String message,int id)
    28     {
    29         super(message);
    30         this.id=id;//regist
    31     }
    32     public int getId()
    33     {
    34         return id;
    35     }
    36 }

  • 相关阅读:
    简单二分求解(木板补漏问题)
    switch语句和for循环
    JAVA运算符和优先级
    JAVA数据类型
    JAVA基础
    JAVA开发环境
    linux配置IP地址
    LVM逻辑分区
    用户和用户组
    第一天
  • 原文地址:https://www.cnblogs.com/zjm1999/p/10054158.html
Copyright © 2020-2023  润新知