异常
异常
目录
- 什么是异常
- 异常体系结构
- Java异常处理机制
- 异常处理
- 自定义异常
什么是异常
实际中遇到的情况不可能是完美的。如用户输入不符合预期. 打开某个文件该文件格式不对或者不存在. 读出数据库的数据可能是空. 程序跑着跑着,但是内存或者硬盘满了。
可以分为三类
- 检查性异常
用户的错误或者问题引起的异常,如要打开一个文件,但是这个文件被用户删了 - 运行时异常
编译的时候看不到,只有运行时可见,可能时被程序员避免的异常。 - 错误Error
脱离程序员控制的问题,如jvm栈溢出了
异常体系结构
java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。
补图
在java PI中非为两类Error和Exception
1. Error
Error对象由Java虚拟机生成并抛出,大多数错误与代码编写者执行的操作无关.
OutOfMemoryErrot,内存不足,jvm会选择线程终止,程序就挂掉了(严重)。
NoClassDefFoundError类定义错误,LinkageError链接错误
2. Exception
RuntimeException运行时异常
ArrayIndexOutOfBoundsException(数组下边越界)
NullPointerException(空指针异常)
ArithmeticException(算术异常)
MissingResourceException(丢失资源)
ClassNotFoundException(找不到类)等异常,这些是不检查异常,通常是程序逻辑错误引起的.
3. Error和Exception区别
Error通常是灾难性的致命错误,是程序无法处理的。在出现这些错误时JVM会终止程序
Exception通常时可处理的,需要在程序中尽可能去处理。
JAVA异常处理机制
- 抛出异常
- 捕获异常
try, catch, finally, throw, throws
try, catch, finally --- 三件套
catch可以有多个,后面写捕获最大的异常项Exception, Throwable
finally可以不写,但写了不论是否发生异常finally都会被执行,通常用来做善后。
IDEA ctrl+alt+t自动生成try catch块
int a = 1;
int b = 0;
try{
if(b = 0){
//手动抛出异常
throw new ArithmeticException();
}
System.out.println(a/b);
}catch(Exception e){
//手动结束程序
System.exit(0);
e.printStackTrace();
}finally{
}
自定义异常
java中内置大部分异常,用户自定义的异常只需要继承Exception即可
//异常类
public class MyException extends Exception{
private int detail;
//看父类exception构造器里传递的信息,是报错信息
public MyException(int a){
this.detail = a;
}
//重写toString方法,方便后面打印异常e
public String toString(){
return "MyException{ detail = "+detail+"}";
}
}
//测试类
static void test(int a)throws{
if (a>10){
throw neew MyException(a);//抛出
}
Systemout.println("OK")
}
public static void main(String[] args){
try{
test(1);
}catch(MyExeption e){
//增加处理异常的代码块
System.out.println("MyException=>"+e);
}
}
实际应用中的总结
- 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
- 多重catch后加一个catch(Exception)来处理可能被遗漏的异常
- 不确定的代码加上try-catch 处理潜在异常
- 尽量去处理异常,切忌只简单打印printStackTrace()
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句块去释放占用的资源
代码有没处理的异常,IDEA中会红色波浪线标注出来,此时按住alt+enter键可以提示怎么处理
博客有点圆

浙公网安备 33010602011771号