【JAVA学习之路 | 提高篇】异常(Exception)

简介: 【JAVA学习之路 | 提高篇】异常(Exception)

1.程序的异常

  • 在使用计算机语言进行项目开发过程中,即使程序员把代码写到尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码来避免的,(比如客户输入的格式问题,读取的文件是否存在).
  • 异常 : 指程序在执行过程中,出现了非正常的情况,如果不处理将导致JVM的非正常停止.
  • 异常并不是指的是语法错误或逻辑错误.语法错了,编译不通过,不会产生字节码文件,根本不会运行.代码逻辑错误,只是得不到自己想要的结果.

2.异常抛出机制

  • java中把不同的异常用不同的类表示,一旦发生某种异常,就会创建该异常的对象,并且throw.程序员可以catch这个异常,并处理;如果没有catch异常,则可能导致程序异常终止.

3.对待异常

  • 遇到错误终止程序运行.
  • 程序员在编写代码时,充分考虑到各种可能发生的异常或错误,极力预防和避免.实在无法避免的,要编写相应的代码进行异常检测,以及异常处理,保持代码的健壮性.

4.异常体系

(1). Throwable

java.lang.Throwable类是程序执行过程中涉及到的异常的根父类.该类继承与java.lang.Object.

Throwable中的常用方法 :

  • public void printStackTrace()打印异常的详细信息.包含了异常的类型,原因,出现的位置,在开发和调试阶段都得使用该方法.
  • public String getMessage()获取异常发生的原因.

Throwable可分为Error和Exception两类,分别对应java.lang.Error和java.lang.Exception.


(2). Error : java虚拟机无法解决的严重问题.如JVM系统内部错误,资源耗尽的严重情况.一般不编写针对性的代码进行捕获.(考虑修改源代码)例如 : StackOverflowError和OutOfMemoryError.


(3). Exception : 其他因编程错误或偶然的外在因素导致的一般性问题,需要编写针对性代码进行捕获,使程序得以正常运行.例如 : 空指针异常,试图读取不存在的文件.

5.编译时期异常与运行时期异常

                   javac.exe                          java.exe


java源程序---------------->字节码文件-------------->在内存中加载类,运行类


(1). 编译时期异常(checked异常,受检异常) : 在代码编译阶段,编译器就能明确警示(代码下有红线)当前代码可能发生的异常(不非要是一定发生),并明确督促程序员提前编写处理他们的代码.如果程序员没有编写异常处理代码,则编译器判定编译失败.从而不能生成字节码文件.通常,这些异常不是由程序员的代码引起的,或者说不是靠简单判断就可以避免的.(如FileNotFoundException).


(2). 运行时期异常 (runtime异常,unchecked异常) : 在代码编译阶段,编译器完全不做任何检查.无论该异常是否会发生,都不会提醒报错.只有当代码真正运行跑起来以后确实发生了异常,他才会被发现.通常,这类异常是程序员的代码编写不当引起.

java.lang.RuntimeException类及其子类都是运行时异常.比如ArrayIndexOutOfBoundsException(角标越界一场).

    //ArrayIndexOutOfBoundsException
    public void test1() {
        int[] a = new int[10];
        //编译阶段未报错,但运行时会报错
        System.out.println(a[10]);
    }
    //NullPointerException
    public void test2() {
        String str = null;
        str.toString();
    }
    //ClassCastException
    public void test3() {
        Object obj = new String();
        Date date = (Date) obj;
    }
    //NumberFormatException
    public void test4() {
        String str = "abc";
        int i = Integer.parseInt(str);
    }
    //InputMismatchException
    public void test5() {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        //假如输入了"abc";
    }
目录
打赏
0
0
0
0
6
分享
相关文章
|
5月前
|
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
155 1
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
299 13
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
160 14
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
336 5
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
56 10
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
302 4
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
66 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等