zoukankan      html  css  js  c++  java
  • 《Java编程那点事儿》读书笔记(六)——异常处理

    1.抛出异常:throw 异常对象;

    下面的代码是一个进制转换代码,可以转换为2进制和8进制,如果输入其他参数,则抛出异常。

     1 public static String transform(int value,int radix){
     2         if(value <0 )
     3             throw new IllegalArgumentException("需要转换的数字不是自然数!");
     4         
     5         if(radix != 2 || radix != 8)
     6             throw new IllegalArgumentException("进制参数非法!");
     7         
     8         StringBuffer sb = new StringBuffer();
     9         int temp;
    10         if(value == 0)
    11             return "0";
    12         
    13         while(value != 0){
    14             temp = value%radix;
    15             sb.insert(0, temp);
    16             value /= radix;
    17         }
    18         return sb.toString();
    19     }

    2.声明异常:声明异常类似于声明药品的副作用,在声明函数的时候同时在函数后面声明该函数可能抛出的异常,这样调用这个函数的程序员就知道这个函数可能出现的异常,就可以提前对这些异常进行处理。上面的函数还可以声明为以下形式:

    public static String transform(int value,int radix) throws IllegalArgumentException{
        //......
    }

    3.捕获异常

    try{
        //逻辑代码
    }catch(异常类名 参数){
        //异常处理代码
    }finally{
        //清理代码
    }

    上述try中的代码是正常执行的代码,如果在执行这段代码的过程中抛出了异常,则根据catch中的异常类名匹配到对应的异常处理代码,最后因为在try中遇到异常时就停止执行try中剩下的代码,而有时候需要做一些后续的清理工作,比如关闭文件,断开网络连接等,所以在finally里面处理这些问题。

    String s = "123";
    try{
        int n = Integer.parseInt(s);
                
        char c = s.charAt(4);
    }catch(NumberFormatException e){
        System.out.println("该字符串无法转换!");
    }catch(StringIndexOutOfBoundsException e){
        System.out.println("字符串索引越界!");
    }catch(Exception e){
        System.out.println("其他异常!");
    }

    上述代码中Exception e这个异常包含了所有类型的异常,它是上述两个异常的父类,所以它要写在这两个异常的后面。

    4.常用异常处理方法

     不处理

     直接处理:提醒用户输入错误,对值进行修改等

     重新抛出:重新抛出一个自定义异常

     在方法中声明:即在引起异常的这个方法声明时声明这个异常,使得调用这个方法的程序员去处理这个异常。一个例子如下:

    public void test(String s)throws NumberFormatException{
        int n = Integer.parseInt(s);
        System.out.println(n);
    }

    上述test方法没有在方法内部处理异常,而是将异常交给调用test函数的程序去处理。

  • 相关阅读:
    Leetcode Binary Tree Preorder Traversal
    Leetcode Minimum Depth of Binary Tree
    Leetcode 148. Sort List
    Leetcode 61. Rotate List
    Leetcode 86. Partition List
    Leetcode 21. Merge Two Sorted Lists
    Leetcode 143. Reorder List
    J2EE项目应用开发过程中的易错点
    JNDI初认识
    奔腾的代码
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3819633.html
Copyright © 2011-2022 走看看