【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";
    }
相关文章
|
1月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
60 1
|
1月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
64 12
|
1月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
36 1
|
1月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
70 7
|
1月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
72 6
|
1月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
64 1
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
62 2
|
1月前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
105 5
|
1月前
|
Java 网络安全 Maven
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
43 2