错误与异常

错误与异常

参照范例:

            String[] strs = {"123","456"};
            System.out.println(strs[3]); //会下标越界,跑RuntimeException

整体说明

Throwable: 有两个重要的子类:Exception(异常)和 Error(错误)

  • Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。例如JVM需要的内存不足,出现OutOfMemeory或者类找不到ClassNotFoundException; Error不需要代码进行处理

    • Error 属于可查的异常(checked exceptions)
  • Exception(异常):是程序本身可以处理的异常。 异常分为运行时异常( RuntimeException)和可查的异常(例如IOException)

    • 可查的异常(checked exceptions)

      • RuntimeException及其子类
    • 不可查的异常(unchecked exceptions)

      这种异常的特点是Java编译器会检查它,就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

      • 除了RuntimeException及其子类以外,其他的Exception类及其子类

异常处理机制

异常处理机制:抛出异常 处理异常

  • 捕获异常: try、catch 和 finally

    • 处理异常
        try {
          // 可能会发生异常的程序代码
        } catch (Type1 id1) {
          // 捕获并处理try抛出的异常类型Type1
        } catch (Type2 id2) {
          // 捕获并处理try抛出的异常类型Type2
        } finally {
          // 无论是否发生异常,都将执行的语句块
        }
    
  • 抛出异常

    • throw 自己抛出

      • 使用throw抛出异常:可以创建异常类的实例对象通过throw语句抛出。该语句的语法格式为: throw new exceptionname;。异常流设计思路也需要方法内部的异常抛出。示例:

          public void doMethod() {
            System.out.println("123");
            throw new RuntimeException("1234");
          }
        
    • throws 向上抛出

      • 方法中throws出异常 methodname throws Exception1,Exception2,..,ExceptionN {}当方法抛出异常列表的异常时,方法将不对这些类型及其子类类型的异常作处理,而抛向调用该方法的方法,由他去处理。异常流设计思路就是用方法抛出异常实现的。示例:

        public void doMethod() throws Exception {  
            //方法的具体实现  
        }
        

Throwable类中的常用方法:

  • getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。
  • getMessage():返回异常的消息信息。
  • printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
/**
 * 出现类似的错误可以跳转continue,进行后续处理.
 * @author Administrator
 *
 */
public class ContinueException extends Exception {
    /**
     * 
     */
    private static final long serialVersionUID = -5869067215256123060L;
    //code码
    private String code;
    public String getCode() {
        return code;
    }
    public ContinueException(String code) {
        this.code = code;
    }
    public ContinueException(String code, String message) {
        super(message);
        this.code = code;
    }
    public ContinueException(String code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }
}

异常练习题

  • 【单选题】下面有关Java异常类的描述,说法错误的是?
    A.异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
    B.非RuntimeException一般是外部错误(非Error),其必须被try {}catch语句块所捕获
    C.Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
    D.RuntimeException体系包括错误的类型转换、数组访问越界和试图访问空指针等,必须被try{}catch语句块所捕获

    • D
  • 【不定项】以下关于JAVA语言异常处理描述正确的有?
    A.throw关键字可以在方法上声明该方法要抛出的异常。
    B.throws用于抛出异常对象。
    C.try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
    D.finally语句块是不管有没有出现异常都要执行的内容。
    E.在try块中不可以抛出异常

    • CD

异常流开发模式

异常流是实际项目中常用的开发模式,最里面代码抛出某个异常例如IOException,然后外围代码try{}catch(Exception ex) {throw ex},这样调用方就知道最内层代码出什么问题,方便快速跟踪

posted @ 2022-06-09 08:47  Faetbwac  阅读(48)  评论(0编辑  收藏  举报