异常(上)概述,捕捉异常,try-catch语句的详细使用

简介: 异常(上)概述,捕捉异常,try-catch语句的详细使用

前言

       该文介绍了Java异常的概述,运行代码时,异常的捕捉,及其使用 try-catch语句的处理。Java自带自动捕捉异常,但try-catch语句可以让我们更加便利地应对代码中的问题。

一、异常是什么?  

       异常概述:

      (1)程序中的异常:程序员没有预料到的情况,或者超出程序员控制的情况。

       (2)异常的分类

   Exception(非致命异常)

                      定义:Exception 是会影响程序正常运行,但可以被解决的问题。

                      例如:RuntimeException 在Java虚拟机正常运行期间抛出异常的类。

public class Demo{
    public static void main(String[] args){
        Object obj = null;
        //运行时错误:空指针异常
        System.out.println(obj.hashCode());
    }
}

        运行结果:

               Error(致命错误)

                       定义:不应该试图捕获的严重错误。

                       例如:

                              a.字节码文件无法解析

                               b.Java虚拟机资源耗尽        

                               c.配置文件格式不规范

                    解决方法:1.重新编写程序

                                       2.重新分配系统资源(重启)

                     例如(代码编写时的严重错误):

public class Demo{
    public static void main(String[] args){
    System.out.println(“你好”)
    //致命性错误,没有分号结尾。
    }
}

      运行结果:

二、捕捉异常

1.自动捕捉异常

      运行后,java API中自动捕捉并在控制台中显示报错的异常

       例如:

2.try-catch语句捕捉异常

        定义:try-catch 语句用于处理代码中可能出现的错误信息。 错误可能是语法错误,通常是程序员造成的编码错误或错别字。 也可能是拼写错误或语言中缺少的功能。

语法:

try{
    //被捕获的代码
}catch(异常类型 e){
    //对异常的处理
}

 实例:

public class Demo{
  public static void main(String[] args) {
    try {
      for(int i = 0;i<5;i++) {
        System.out.println("输出"+i+"行");
        int a = 1/i;
                //发生运算异常的代码,i = 0 时,除数为0,运算异常。
      }
    }catch(Exception e){
      System.out.println("发生了异常,请管理员尽快处理!");
            //做出代码异常的反馈
    }
}

运行结果:

              注:

                      a.只能反馈或修改非致命的异常,Error错误无法解决。

                     b.最好在catch代码块中写入处理异常的代码,不要省懒事,不然发生时很难查找出来。

       catch代码块中处理异常常用的3个函数:

            getMessage()函数:输出错误性质。

             toString()函数:给出异常的类型与性质。

            printStackTrace()函数:指出异常的类型、性质、栈层次及出现在程序中的位置。

 a.多重try-catch代码块        

              语法:

try {
    //some codes
}catch(some Exception1 e){
    //some codes
} catch(some Exception2 e){
    //some codes
} catch(some Exception3 e){
    //some codes
}

  运行逻辑:try语句中发生的每一个异常,依次对照每个catch语句的异常类型,直到输出对应的catch语句,反馈或者解决异常。

       实例:

public class Demo {
  public static void main(String[] args) {
    try {
      int a = 1/0;
      //该行代码具有算数异常
    }catch(NullPointerException e) {
      System.out.println("发生了空指针异常,请管理员及时处理!");
    }catch(ArithmeticException e) {
      System.out.println("发生了算数异常,请管理员及时处理!");
            //对应找到了属于算数异常的catch语句,反馈输出。
    }catch(ClassCastException e) {
      System.out.println("发生了类转换异常,请管理员及时处理!");
    }
  }
}

 输出结果:

       b.异常的中断机制

                解释:当try代码块中的语句发生异常时,程序就会调转到对应的catch代码块中执行,反馈或者解决问题,然后继续运行后面的代码

                示例:

public class Demo {
  public static void main(String[] args) {
    for(int i = 0;i<5;i++) {
      try {
        System.out.println("输出"+i+"行");
        int a = 1/i;
      }catch(Exception e) {
        e.printStackTrace();
        System.out.println("发生了异常,请管理员尽快处理!");
      }
    }
  }
}

    运行结果:

                注:由图可见,发生异常反馈后,后续代码仍被执行。Java的异常处理是结构化的,不会因为一个异常影响整个程序的运行

       c.finally代码块恢复机制

finally代码块:完整的异常处理语句,包含finally语句。无论try-catch语句是否顺利执行完毕,都会执行 finally 语句。往往用于程序崩溃后,保存崩溃前的工作内容。

              语法:

try{
  //被捕获的代码
}catch(异常类型 e){
  //对异常的处理
}finally{
  //最后一定会执行的代码
}

       实例:

public class Demop {
  public static void main(String[] args) {
    try {
      System.out.println("打开连接池");
      int a = 1/0;
      System.out.println("通过连接池读取数据");
    }catch(Exception e){
      System.out.println("打印堆栈跟踪异常,请管理员及时处理!");
      e.printStackTrace();
    }finally {
      System.out.println("系统提示:已保存工作内容");
      System.out.println("关闭连接池");
    }
  }
}

运行结果:

               由此可见,当代码运行异常时,finally代码块仍可以正常运行,可以实现及时自动保存的功能。

finally块一般都会得到执行,但在以下四种情况中不会执行:

  1. finally块中的代码发生了异常。
  2. 在finally块前面中使用了System.exit() 方法,终止了程序运行。
  3. 程序所在线程死亡。
  4. 关闭CPU(电脑关闭)

总结

       以上就是对异常的概述,捕捉异常,try-catch-finally语句的解读。如果有什么疑问或者补充或纠错的内容,欢迎在评论区中留言,博主会及时做出反馈的。

相关文章
|
6月前
|
C++
C++ 捕获所有异常并拿到错误原因的方法
C++ 捕获所有异常并拿到错误原因的方法
179 0
|
6月前
|
Java C++ Spring
解决NoUniqueBeanDefinitionException异常的方法
了解Spring框架中`NoUniqueBeanDefinitionException`异常的原因和解决方案。此异常发生在容器内有多个相同类型的bean时,Spring无法决定注入哪个bean。解决方法包括:使用`@Primary`注解标记首选bean,利用`@Qualifier`注解配合`@Autowired`、`@Resource`、`@Inject`或`@Value`指定bean名称。选择哪种方法取决于业务需求和具体场景,预防措施是避免创建多个同类型bean或使用`@Primary`注解。
229 0
|
15天前
|
前端开发 JavaScript
使用 try-catch 语句来捕获 Promise 中的异常
【10月更文挑战第26天】使用try-catch语句捕获Promise中的异常是一种非常实用的技术,能够使异步代码的错误处理更加清晰、可控,提高程序的可靠性和稳定性。在实际开发中,合理地运用try-catch语句以及其他相关的错误处理机制,可以有效地应对各种可能出现的异常情况,为用户提供更好的体验。
|
10天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
26 2
|
1月前
|
Java
让星星⭐月亮告诉你,Java异常分类[Throwable(Error/Exception(RuntimeException/其他异常)) 检查时异常 非检查时异常]
本文深入解析了Java异常处理机制,重点介绍了`Throwable`类及其子类`Error`和`Exception`,并通过实例代码、流程图和表格详细解释了异常的分类、区别及处理方法,帮助读者掌握异常处理的关键技巧,提升程序的稳定性和健壮性。
46 1
|
前端开发 rax Linux
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
128 0
|
JSON 安全 前端开发
替代try catch处理异常的优雅方式
替代try catch处理异常的优雅方式
|
Java 程序员 编译器
【Java】全面解析异常(异常的分类、处理、抛出和捕获等)
“程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。”
|
索引 Python
Python基础 常见的异常类型 异常的捕获 异常的处理机制
python中常见的异常类型 1、ZeroDivisionError 除(或取模)零(所有数据类型) 2、IndexError #序列中没有此索引 3、KeyError #映射中没有这个键 4、NameError #未声明/初始化对象(没有属性) 5、SyntaxError #Python 语法错误 6、ValueError #传入无效的参数
Python基础 常见的异常类型 异常的捕获 异常的处理机制
|
JavaScript 前端开发
错误与异常 之 try...catch语句
错误与异常 之 try...catch语句
121 0