JAVA_异常

2023年 9月 4日 42.6k 0

异常概念理解

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

屏幕截图 2023-09-04 155134.png

异常的存在形式

  • 异常在java中以类的形式存在,每一个异常类都可以创建异常对象
  • 异常发生的时间

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

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

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

  • 出现编译时异常的时候,需要考虑采用哪种处理方式
  • 不要在main()方法中使用上抛的处理方式
  • 使用try...catch的时候,可以将异常信息打印出来
  • throws可以抛出多个异常,用,隔开
  • 使用throws时,如果程序发生异常,后续代码无法执行
  • 使用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");
        }
    }
    

    异常对象常用的方法

  • 获取异常简单的描述信息:String msg = exception.getMessage();
  • 打印异常追踪的堆栈信息: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语句

  • 必须要和try...catch语句一起联合使用
  • finally子句中的代码是最后执行的,并且一定会执行
  • 主要用于流的关闭,因为流在使用完之后是一定要关闭的,如果在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);
        }
    }
    

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论