zoukankan      html  css  js  c++  java
  • JAVA项目中的常用的异常处理情况

    1、Error

    LinkageError:链接错误;

    ThreadDeath:线程死锁;

    OutOfMemoryError:内存溢出;

    StackOverflowError :堆栈溢出;

    NoClassDefFoundError:类定义错误;

    Virtual MachineError:虚拟机运行错误。

    2、运行时异常(unChecked异常)

    SecurityException:安全性异常;

    NullPointerException:空指针异常;

    ClassCastException:类型强制转换异常;

    ClassNotFoundException:找不到类异常;

    IllegalArgumentException:非法参数异常;

    NegativeArraySizeException:数组长度为负异常;

    ArithmeticException:算术条件异常。如:整数除零;

    ArrayIndexOutOfBoundsException:数组下标越界异常;

    ArrayStoreException:数组中包含不兼容的值抛出的异常;

    StringIndexOutOfBoundsException:字符串下标越界异常;

    ArrayStoreException:向数组中存放与声明类型不兼容对象异常;

    3、非运行时异常(checked异常)

    IOException:输入输出流异常;

    SQLException:数据库操作异常;

    EOFException:文件已结束异常;

    TimeoutException:执行超时异常;

    DataFormatException:数据格式化异常;

    NoSuchFieldException:没有匹配的属性异常;

    ClassNotFoundException:没有匹配的类异常;

    FileNotFoundException:没有匹配的文件异常;

    NoSuchMethodException:没有匹配的方法异常;

    4、Throwable类的主要方法

    public String getMessage():返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。

    public Throwable getCause():返回一个Throwable 对象代表异常原因。

    public String toString():使用getMessage()的结果返回类的串级名字。

    public void printStackTrace():打印toString()结果和栈层次到System.err,即错误输出流。

    public StackTraceElement [] getStackTrace():返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

    例子:

    OutputStreamWriter out = ... 

    java.sql.Connection conn = ... 
    try // ⑸  
    Statement stat = conn.createStatement();  
    ResultSet rs = stat.executeQuery("select uid, name from user");  
    while (rs.next())  {  
        out.println("ID:" + rs.getString("uid"// ⑹
        +",姓名:" + rs.getString("name"));  
        }  
        conn.close(); // ⑶  
        out.close(); 
    catch(Exception ex) // ⑵ 
    {  
    ex.printStackTrace(); //⑴,⑷ 
    }
     
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    OutputStreamWriter out = ... java.sql.Connection conn = ...
         try {
               Statement stat = conn.createStatement();
                  ResultSet rs = stat.executeQuery("select uid, name from user");
                    while (rs.next()){
                           out.println("ID:" + rs.getString("uid") + ",姓名: " +
                      rs.getString("name"));
                    }
              catch(SQLException sqlex) {
                       out.println("警告:数据不完整");
                       throw new ApplicationException("读取数据时出现SQL错误", sqlex);
                 catch(IOException ioex) {
                          hrow new ApplicationException("写入数据时出现IO错误", ioex);
                   finally{
                              if (conn != null) {
                            try {  conn.close();
                             catch(SQLException sqlex2) {
                                 System.err(this.getClass().getName() + 
                          ".mymethod - 不能关闭数据库连接: " + sqlex2.toString());                                       }
                              }
                             if (out != null) {
                                try {
                                  out.close();
                                 }catch(IOException ioex2) {
                                 System.err(this.getClass().getName() + 
                            ".mymethod - 不能关闭输出文件" + ioex2.toString());
                                   }
                              }
    }

    在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

    抛出异常

      当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

      该方法的调用者必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,所经方法都层层上抛获取的异常,若最终都没有被处理,将交由虚拟机处理。处理也很简单,就是打印异常消息和堆栈信息,记录日志。

    捕捉异常

      在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。

      运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。

      在方法中用try-catch语句捕获并处理异常,catach语句可以有多个,用来匹配处理异常。并且尽量将捕获底层异常类的catch子句放在前面。

      异常总是先被抛出,后被捕捉的。

    Java规定

      对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。
      RuntimeException由业务逻辑保证。

    、抛出异常实例(throws 和 throw)

    public class Throws { public static void main(String[] args) throws Exception{//抛出异常类 System.out.println(10 / 0); throw new Exception("抛出异常对象"); //System.out.println("throw后面的代码不再执行"); } }

    (以上均从网上所找,并非个人所写)

  • 相关阅读:
    java.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/123-haozijia/p/11764221.html
Copyright © 2011-2022 走看看