java异常
2021/6/11 12:22:33
本文主要是介绍java异常,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- Error和Exception
- 捕获和抛出异常
- 自定义异常
Error和Exception
-
Error与Exception的区别:
-
都继承Throwable类
-
Error:
-
总是不可控制的(unchecked)。
-
经常用来用于表示系统错误或低层资源的错误。
-
如何可能的话,应该在系统级被捕捉。
-
-
Exception:
-
可以是可被控制(checked) 或不可控制的(unchecked)。
-
表示一个由程序员导致的错误。
-
应该在应用程序级被处理。
-
-
-
Java 中定义了两类异常:
-
Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。
可能导致的问题:代码效率低,耦合度过高。
-
Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们不能通过client code来试图解决,所以称为Unchecked exception 。
-
-
常见的几种 RuntimeException如下:
- NullPointerException - 空指针引用异常
- ClassCastException - 类型强制转换异常。
- IllegalArgumentException - 传递非法参数异常。
- illegalStateException:在不合理或不正确时间内唤醒一方法时出现的异常信息。换句话说,即 Java 环境或 Java 应用不满足请求操作。
- ArithmeticException - 算术运算异常
- ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
- IndexOutOfBoundsException - 下标越界异常
- NegativeArraySizeException - 创建一个大小为负数的数组错误异常
- NumberFormatException - 数字格式异常
- SecurityException - 安全异常
- UnsupportedOperationException - 不支持的操作异常
-
常见的CheckedException异常:
我们在编写程序过程中try——catch捕获到的一场都是CheckedException。
io包中的IOExecption及其子类,都是CheckedException。
捕获和抛出异常
-
抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理
-
捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log
-
如果异常出现的话,会立刻终止程序,所以我们得处理异常:
-
该方法不处理,而是声明抛出,由该方法的调用者来处理(throws)。
-
在方法中使用try-catch的语句块来处理异常
-
-
Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
-
try -- 用于监听。
将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
-
catch -- 用于捕获异常。
捕获try语句块中发生的异常。
-
finally(可以不要) -- finally语句块总是会被执行。
它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
-
throw -- 用于抛出异常。
-
throws -- 用在方法签名中,用于声明该方法可能抛出的异常。
主方法上也可以使用throws抛出。如果在主方法上使用了throws抛出,就表示在主方法里面可以不用强制性进行异常处理,如果出现了异常,就交给JVM进行默认处理,则此时会导致程序中断执行。
-
throw 是语句抛出一个异常;throws 是方法抛出一个异常;
-
异常类可以声明多个,用逗号分割就可以了。但是要冲小到大捕获,否则会报错
int a = 0; int b = 1; try{ //try监控区域 if (a==0) { //为下面的b/做准备,如果a==0,那么必有异常,就不会执行后面的语句了 throw new ArithmeticException();//主动抛出的异常 } int c = b/a; } catch(Error error){//catch(想要捕获的异常类型) System.out.println("error"); }catch(Exception e){//catch(想要捕获的异常类型) System.out.println("exception"); }catch(Throwable throwable){//catch(想要捕获的异常类型) System.out.println("throwable"); }finally {//异常善后处理,可以不要 System.out.println("finally"); }
-
自定义异常
- JDK中提供的异常信息不满足目前的使用
- 步骤:
- 声明一个自定义异常类
- 将自定义类继承Exception
- 编写两个构造器,一个空的,一个有参数的构造器
//年龄异常,和其它异常一样用就完了 public class AgeException extends Exception{ public AgeException() { } public AgeException(String msg) { super(msg); } }
这篇关于java异常的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?