java基础之异常

一、Throw(抛出异常,让调用者处理)

   Throw(将异常抛给调用者)
       在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?
       1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。
       2. 需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw 就可以完成。
       throw 异常对象。
       throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

   public class ThrowDemo {     
        public static void main(String[] args) {         
              //创建一个数组          
              int[] arr = {2,4,52,2};         
              //根据索引找对应的元素          
              int index = 4;         
              int element = getElement(arr, index);           
              System.out.println(element);         
              System.out.println("over"); 
        } 


       public static int getElement(int[] arr,int index){          
                    //判断  索引是否越界           
              if(index<0 || index>arr.length‐1){              
               /*              
              判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。              
              这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。                
              */            
              throw new ArrayIndexOutOfBoundsException("哥们,角标越界了~~~");         }         
              int element = arr[index];         
              return element;     
          } 
    }   

二、Throws(声明异常),,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).

  修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{   }

  

  public class ThrowsDemo {     
        public static void main(String[] args) throws FileNotFoundException {         
              read("a.txt");     
        }       

               // 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明           
       public static void read(String path) throws FileNotFoundException {         
           if (!path.equals("a.txt")) {
              //如果不是 a.txt这个文件              
              // 我假设  如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常  throw             
              throw new FileNotFoundException("文件不存在");         
              }     
        } 
   }

三、 捕获异常try…catch,捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。

  格式:
        try{      
              编写可能会出现异常的代码 
        }catch(异常类型  e){      
              处理异常的代码     
             //记录日志/打印异常信息/继续抛出异常
        }

  演示:
     public class TryCatchDemo {     
              public static void main(String[] args) {        
                    try {
                          // 当产生异常时,必须有处理方式。要么捕获,要么声明。             
                          read("b.txt");         
                    } catch (FileNotFoundException e) {
                          // 括号中需要定义什么呢?            
                          //try中抛出的是什么异常,在括号中就定义什么异常类型                
                       System.out.println(e);         
                    }         
                    System.out.println("over");     
              }  

        /**      
         * 我们 当前的这个方法中 有异常  有编译期异常      
         */     
        public static void read(String path) throws FileNotFoundException {         
              if (!path.equals("a.txt")) {
                    //如果不是 a.txt这个文件              
                    // 我假设  如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常  throw                       
                   throw new FileNotFoundException("文件不存在");
              }
      }
  } 

四、 finally 代码块:有一些特定的代码无论异常是否发生,都需要执行

finally的语法: try...catch....finally:自身需要处理异常,终还得关闭资源。

     
   public class TryCatchDemo4 {     
            public static void main(String[] args) {         
                try {             
                    read("a.txt");        
                } catch (FileNotFoundException e) {             
                    //抓取到的是编译期异常  抛出去的是运行期              
                    throw new RuntimeException(e);         
               } finally {             
                       System.out.println("不管程序怎样,这里都将会被执行。");         
               }         
                 System.out.println("over");    
            }     
     /*      
      *      
      * 我们 当前的这个方法中 有异常  有编译期异常      
      */     
    public static void read(String path) throws FileNotFoundException {         
            if (!path.equals("a.txt")) {
                    //如果不是 a.txt这个文件             
                   // 我假设  如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常  throw                           
                     throw new FileNotFoundException("文件不存在"); 
             }
      }
  }

五、异常注意事项

  多个异常使用捕获又该如何处理呢? 
        1. 多个异常分别处理。 
        2. 多个异常一次捕获,多次处理。 
        3. 多个异常一次捕获一次处理

  try{      
        编写可能会出现异常的代码 
  }catch(异常类型A  e){  当try中出现A类型异常,就用该catch来捕获.      
        处理异常的代码      
        //记录日志/打印异常信息/继续抛出异常 
  }catch(异常类型B  e){  当try中出现B类型异常,就用该catch来捕获.      
        处理异常的代码      
        //记录日志/打印异常信息/继续抛出异常 
  }

六、自定义异常
原因:发现这些异常都是JDK内部定义好的,但是实际开发中也会出现很多异常,这些异常很可能在JDK中 没有定义过,例如年龄负数问题,考试成绩负数问题.那 么能不能自己定义异常呢?
异常类如何定义:
1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。
2. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。

   案例:
  
      // 业务逻辑异常 
        public class RegisterException extends Exception {     
          /**      
           * 空参构造      
           */     
             public RegisterException() {}       
        
         /**      
          *      
          * @param message 表示异常提示      
          */     
            public RegisterException(String message) {         
               super(message);     
             } 
        }
posted @ 2020-07-21 15:11  jock_javaEE  阅读(121)  评论(0编辑  收藏  举报