异常
-
抛出异常的程序后面不会执行。和retuen的作用对等
-
如果抛异常的情况,还想输出后面的话
第一种,用if判断出特殊情况
如果知道某个条件可能会抛异常,但是不知道抛出哪些具体的异常时,用关键字try{
}catch(),异常的数据类型参数名
throw是抛出异常,不想解决抛给第二个类
e.printStackTrace(),输出异常在哪里
顶级异常:throwable
catch能抓多个异常,从小范围到大范围【ch08】
Error和Exception区分:
Error是编译时错误和系统错误,系统错误在除特殊情况下,都不需要你来关心,基本不会出现。而编译时错误,如果你使用了编译器,那么编译器会提示。
Exception则是可以被抛出的基本类型,我们需要主要关心的也是这个类。编译没出错,运行出错
Exception又分为RunTimeException和其他Exception。
异常的继承体系结构:
最顶级的Throwable:错误,异常
Exception分类:编译器异常,运行期异常
1.编译期异常:其他;MyExceptiont
-
必须处置的异常,即程序在运行时由于外界因素造成的一般性异常
-
Java程序必须显示处理,否则程序就会发生错误,无法通过编译
-
在编译某个程序的时候,有可能会有这样那样的事情发生,比如文件找不到,这样的异常就必须在编译的时候处理,如果不处理编译通不过
编译器异常分类
java.lang.ClassNotFoundExeption:没有找到具有指定名称的类异常。 java.lang.FileNotFoundException:访问不存在的文件异常。 java.lang.IO Exception:操作文件时发生的异常。 java.sql.SQL Exception:操作数据库时发生的异常。
2.运行期异常:RunTimeException
-
编译器不要求强制处置的异常。一般是指因设计或实现方式不当而导致的问题。也可以说,是程序员的原因导致的,是本来可以避免发生的情况。
注:各个各记五个英文的
如果一个方法没有捕获编译器异常,该方法必须使用throws来声明
异常举例:
NullPointerException: 空指针异常,一般出现于数组,空对象的变量和方法 ArrayIndexOutOfBoundsException: 数组越界异常 ArrayStoreException: 数据存储异常
ArithmeticException: 算数异常,一般在被除数是0中
ClassCastException: 类型转换异常
IllegalArgumentException: 非法参数异常 IllegalThreadStateException: 非法线程状态异常 NumberFormatException: 数据格式异常 OutOfMemoryException: 内存溢出异常 PatternSyntaxException: 正则异常
自定义异常
原因:当Java提供的异常类,不够使用时,需要自己定义一些异常类。
开发中,大部分情况下使用的都是运行期异常
为什么要手动抛异常?
因为要配合全局异常处理机制来解决问题
方法:
1.所有异常必须是throwable的子类
2.如果要定义一个编译器异常,需要继承Exception类
3.如果要定义一个运行期异常,需要继承RunTimeException
如果使用throw抛出一个编译期异常,就必须在方法的声明处使用throws关键字来标记异常
-
throw语句是可以当返回值
-
在一个有返回值的方法中,如果有条件分支,一定要保证每种情况下都有返回值
throws和throw区别
一个方法中,throws可以抛多个异常,用逗号隔开
自定义异常类
定义错误码,定义异常信息
异常链
有时候我们会捕获一个异常后再抛出另一个异常 顾名思义就是将异常发生的原因一个传一个串起来,即把底层的异常信息传给上层,这样逐层抛出。
例:今天为什么这么穷,只因为当年潘金莲看了西门庆一眼
当异常没被解决的时候,可以选择抛出问题,留给下一级解决,要不然自己解决
主方法中不要抛了,再抛就抛给虚拟机JVM了
try--finally-return
方法的重写
重写的子类不能抛出比父类抛出的异常范围更大
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现