网站首页 > java教程 正文
1. 异常概述
异常就是程序在运行时出现的意外的,不正常的情况或结果。
若异常产生后没有正确的处理,会导致程序的中断,以致造成损失。所以我们在开发中要尽量考虑到各种可能会发生的异常,并对其作出正确的处理,确保程序的正常执行。主流编程语言大多都提供了异常处理机制。
1.1. 异常的继承体系(掌握)
Throwable类有两个子类Error和Exception,分别表示错误和异常。
Exception 和Error的子类大都是以Error或Exception作为类名后缀。
1.2. Error(了解)
Error,表示代码运行时 JVM(Java 虚拟机)出现的问题。如系统崩溃或内存溢出等,不需要处理Error,
常见的Error。
+ StackOverflowError:当应用程序递归太深而发生堆栈溢出时,抛出该错误。比如死循环或者没有出口的递归调用。
+ OutOfMemoryError:因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该错误。比如new了非常庞大数量的对象而没释放。
1.3. Exception(了解)
Exception,表示程序在运行时出现的一些不正常情况,一般大多数表示轻度到中度的问题,属于可预测、可恢复问题。如除数为0,数组索引越界等,这种情况下,程序员通过合理的异常处理,确保程序的正常运行直到结束,常见的Exception。
+ ArrayIndexOutOfBoundsException:用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
+ ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
+ NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:
1调用 null 对象的实例方法。
2访问或修改 null 对象的字段。
3将 null 作为一个数组,获得其长度等。
2. 捕获异常
一旦出现异常,程序会立即终止,所以在开发中我们一定要处理异常,处理异常有两种方式:
一种是直接处理异常,一种是自身抛出异常,不处理。
2.1. 捕获单个异常(掌握)
处理异常代码格式:
异常一旦产生,首先会实例化一个该类型异常对象,并把该对象赋值给对应的catch语句块里的异常类变量。
当然也可以使用Exception接受所有的异常对象(多态)。开发中不建议捕获异常的时候使用Throwable,当然使用Throwable是没有一点问题的,只不过Throwable分为Error和Exception,而Error是没必要处理的,所以也没必要使用Throwable。
2.2. 访问异常信息(掌握)
getMessage方法只获取异常的错误信息,一般获取之后,把错误信息给用户查看。
printStackTrace方法,用于打印异常具体信息,包含了异常信息,错误类型,错误位置,方便程序开发阶段的调试(一般要打开),也是JVM默认的异常处理机制。
目前就直接使用e.printStackTrace()就可以了。
2.3. 捕获多个异常(掌握)
处理多种类型异常代码格式:
若程序中还有未知的异常,我们可以在最后使用Exception进行统一捕获。
2.4. finally语句块(掌握)
在处理多种异常类型时,必须先捕获子类型异常,后捕获父类型异常。
try-catch-finally格式
try块必须和catch块或try和finally同在,不能单独存在try或catch或finally。
finally块总会执行,不论是否有错误出现。但如果try语句块中或catch语句块存在JVM退出代码(System.exit(0);),finally块就不会被执行了。
一般,我们把关闭资源的代码放在finally里面,保证资源总是能关闭。
3. 抛出异常
一旦出现异常,程序会立即终止,所以在开发中我们一定要处理异常,处理异常有两种方式:
一种是直接使用try-catch处理异常(已讲),一种是自身抛出异常,不处理,而抛出异常,有两种:
- 方法里面会出现异常,但方法不想处理这个异常,使用throw抛出异常对象。
- 方法里面可能会产生异常,自身不想处理,提醒调用该方法的方法做需要处理,使用throws关键字。
3.1. throws关键字(掌握)
在可能出现异常的方法上声明抛出可能会出现异常的类型,格式:
修饰符 返回值类型 方法名(参数列表..) throws 异常类A,异常类B...{
}
抛出异常的原因:该方法自身处理不了该异常,只能使用throws提醒该方法的调用者需要处理异常。当然调用者也有两种处理方式: 自己捕获处理或再次抛出(要么try...catch ,要么也throws)。
若某方法内可能出现多个异常,那么也可以同时声明抛出对多个异常类型,异常类之间使用逗号隔开。
3.2. throw关键字(掌握)
当方法内,需要返回一个错误结果给调用者时,一般使用throw关键字在方法内手动抛出一个具体的异常对象。
上述代码中throws和throw并不冲突,他们各自的作用是不一样的:
throw:当传入的参数已经存在,就返回一个错误结果给isExist方法的调用者。
throws:用于提醒isExist方法的调用者,需要处理异常。
throws和throw的区别
lthrows用于方法声明上,表示该方法不需要处理某种类型异常,也在提醒该方法调用者需要处理异常。
lthrow用于返回一个错误结果,抛出具体异常类的对象给调用者。
本系列教程为叩丁狼Java基础班内部教材,若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请私信作者。
猜你喜欢
- 2024-11-06 Java核心知识3:异常机制详解(java的三种核心机制是什么)
- 2024-11-06 【Spring系列】05 自定义异常以及全局异常处理器 #java
- 2024-11-06 3种Sentinel自定义异常,你用过几种?
- 2024-11-06 关于Java Exception异常的深入用法及实例
- 2024-11-06 Java-throw异常详解以及过程(java throw exception)
- 2024-11-06 《JAVA编程思想》5分钟速成:第12章(异常)
- 2024-11-06 面试官:java开发中异常怎么定义好 程序员:不知道
- 2024-11-06 「译」11条Java异常处理的最佳实践
- 2024-11-06 Java入门教程十一(异常处理)(java异常处理的三种方法)
- 2024-11-06 Java,你管这叫异常?(java异常是什么意思)
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)