【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";
    }
相关文章
|
2天前
|
Java Linux Windows
java打包异常【已解决】
java打包异常【已解决】
12 5
|
2天前
|
XML Java 数据格式
java异常-SpringBoot-
java异常-SpringBoot-
7 0
|
2天前
|
Java Android开发
Java 程序设计 第6章 异常与断言 笔记
Java 程序设计 第6章 异常与断言 笔记
|
3天前
|
数据采集 Java Linux
Java异常之【sun.security.validator.ValidatorException: PKIX path building failed: sun.security...】
Java异常之【sun.security.validator.ValidatorException: PKIX path building failed: sun.security...】
15 0
Java异常之【sun.security.validator.ValidatorException: PKIX path building failed: sun.security...】
|
3天前
|
Java
JAVA高级部分学习小结(2023.11.4)
JAVA高级部分学习小结(2023.11.4)
|
5天前
|
存储 分布式计算 大数据
MaxCompute操作报错合集之通过UDF调用异常(其他使用http调用正常)。报错:java.lang.NoSuchMethodError:是什么导致的
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
8天前
|
算法 Java 测试技术
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题
【6月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
15 0
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题
|
9天前
|
Java
Java线程学习经典例子-读写者演示
Java线程学习经典例子-读写者演示
8 0
|
9天前
|
关系型数据库 分布式数据库 数据库
PolarDB操作报错合集之遇到报错:Exception in thread "main" java.lang.NoClassDefFoundError: jpcap/JpcapCaptor,该怎么解决
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
|
11天前
|
Java 程序员 编译器
蓝易云 - Java:Exception和Error有什么区别?
总的来说,Exception和Error的主要区别在于他们的用途和处理方式。Exception是可以被程序员处理的问题,而Error则是程序无法处理的严重问题。在编写代码时,程序员应该尽力处理可能出现的异常,但是对于错误,除非你知道如何处理,否则最好让程序终止,因为继续运行可能会导致更严重的问题。
9 0