likes
comments
collection
share

JAVA_异常

作者站长头像
站长
· 阅读数 15

异常概念理解

程序执行过程中出现的不正常情况,虚拟机会将异常信息打印到控制台上,为了增强程序的健壮性

JAVA_异常

异常的存在形式

  1. 异常在java中以类的形式存在,每一个异常类都可以创建异常对象

异常发生的时间

  1. 都是发生在运行阶段
  2. 编译时异常是因为必须在编译阶段预先处理,否则会报错,所以叫编译时异常
  3. 异常是以类的形式存在,发生异常时都会new一个异常对象,只有在运行阶段才可以new对象

异常的分类

  1. 主要分为:错误,受控异常,非受控异常
  2. 错误:程序中出现了error,无法恢复,只能重新启动应用程序
  3. 受控异常:出现了这种异常必须处理,不处理的话程序无法编译通过,又称"编译时异常"
  4. 非受控异常:出现了这种异常可以不处理,例如一个数字被0除的异常,又称"运行时异常"

处理异常的手段

  1. 两种方式,分别是使用throws关键字,将异常抛给上级,另一种是使用try...catch语句进行捕捉
  2. 如果持续使用throws关键字进行上抛,最终会抛给main(),然后是JVM,此时程序会直接结束,所以建议在main方法中的异常使用try...catch进行捕捉

注意

  1. 出现编译时异常的时候,需要考虑采用哪种处理方式
  2. 不要在main()方法中使用上抛的处理方式
  3. 使用try...catch的时候,可以将异常信息打印出来
  4. throws可以抛出多个异常,用,隔开
  5. 使用throws时,如果程序发生异常,后续代码无法执行
  6. 使用try...catch时,如果程序发生异常,try语句快中,异常代码的后续代码无法执行,try...catch处理完之后,后续代码可以正常执行
public class ExceptionTest01 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NumberFormatException nfe = new NumberFormatException("数字格式异常对象");
        System.out.println(nfe);
        // 调用doSome()方法
        // 如果没有在编译的时候处理,编译会报错
        //doSome();
        try {
            doSome();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    /*
    * 该方法使用了throws ClassNotFoundException
    * 表示
    * 1、该方法在执行的时候可能会抛出ClassNotFoundException异常
    * 2、ClassNotFoundException的父类是Exception,属于编译时异常,则在调用的时候需要手动处理
    * */
    public static void doSome() throws ClassNotFoundException{
        System.out.println("HelloWorld");
    }
}

异常对象常用的方法

  1. 获取异常简单的描述信息:String msg = exception.getMessage();
  2. 打印异常追踪的堆栈信息:exception.printStackTrace();
public class ExceptionTest03 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NullPointerException e = new NullPointerException("空指针异常");
        // 获取异常的简单信息
        String msg = e.getMessage();
        System.out.println(msg);
        // 打印异常堆栈信息,是采用异步线程的方式打印的
        e.printStackTrace();
        System.out.println("HelloWorld");
    }
}

java.lang.NullPointerException: 空指针异常
空指针异常
    at java_SE/com.javase.exception.ExceptionTest03.main(ExceptionTest03.java:9)
HelloWorld

finaly语句

  1. 必须要和try...catch语句一起联合使用
  2. finally子句中的代码是最后执行的,并且一定会执行
  3. 主要用于流的关闭,因为流在使用完之后是一定要关闭的,如果在try语句中关闭,如果出现了异常,异常后面的代码执行不了,有可能没有关闭流

自定义异常

public class MyException extends Exception {
    public MyException() {
    
    }
    public MyException(String s) {
        super(s);
    }
}
public class MyExceptionTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyException e = new MyException("用户名不能为空");
        e.printStackTrace();
        String msg = e.getMessage();
        System.out.println(msg);
    }
}