Java异常及相关处理
1.Throable的两类子类
Error类是程序运行时候抛出的最严重级别的错误,如VirtualMachineError,ThreadDeath。抛出了Error的程序从Java设计的角度来讲,程序基本不可以通过后续代码修复,从而理应终止。从语法上来讲,所有这些都可以被写进catch里面,Error因为上述原因,不应该被代码处理。
Exception类又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。不检查异常就是所谓的运行时异常,类似NullPointerException,ArrayIndexOutOfBoundsExceptin之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求。
2.Java Error类与Exception类的区别Error和Exception都是Throable的子类。一般意义来讲,区别就是Error比Exception更严重,不易通过后续代码处理和修复,不应该被代码catch到的错误。而Exception是指严重程度较轻的程序问题,相较于Error更容易被后续代码处理和修复的,有些需要通过try catch代码处理,有些不建议通过try catch代码处理。
4.异常处理的两种方式方式一捕获处理
捕获处理格式
try{
可能发生异常的代码
}catch(捕获的异常类型 变量名){
处理异常的代码
}
...
}catch(捕获的异常类型 变量名){
处理异常的代码
}
finally{
无论try中是否有异常,也不管catch是否可以捕获异常,也不管try和catch中是不是有return,都会执行
}
注
- 如果try块中代码出现了异常经过处理之后,那么try-catch块外面的代码可以正常行。
- 如果try块中代码出现了异常的代码,那么try块中出现异常代码后面的代码时不会执行的。
- 一个try块后面时可以跟多个catch块的,即一个try块可以捕获多种异常的类型。
- 一个try块可以捕获多种异常的类型,捕获的异常类型必须从小到大进行捕获,否则编译报错。
实例
public class ExceptionDemo2 {
public static void main(String[] args) {
try {
sho(1);
}catch (NullPointerException e) {
System.out.println("空指针异常");
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界异常");
}finally {
System.out.println("一定会执行");
}
System.out.println("程序结束!");
}
private static void sho(int a) {
if (a == 0) {
int[] arr = ne int[0];
System.out.println(arr[1]);
}else {
int[] arr = null;
System.out.println(arr.length);
}
}
}
方式二抛出处理(thro thros)
注
- 如果一个方法的内部抛出了一个异常对象,那么,必须要在方法上声明抛出。
- 如果调用了一个声明抛出异常的方法,那么调用者必须要处理异常。
- 如果一个方法内部抛出了一个异常对象,那么thro语句后面的代码都不会在执行了。
- 在一种情况下,只能抛出一种类型的异常对象。
实例
public class ThrosDemo {
public static void main(String[] args) thros ClassNotFoundException, FileNotFoundException {
method01(0);
}
private static void method01(int a) thros ClassNotFoundException, FileNotFoundException {
if (a == 0){
thro ne ClassNotFoundException("类型不存在!");
}else {
thro ne FileNotFoundException("文件不存在!");
}
}
}
5.举例RuntimeException类的五个子类
1.ClassCastException类型强制转换异常
Object x = ne Integer(0); System.out.println((String)x);
当试图将对象强制转换为不是实例的子类时,抛出该异常
2.ArithmeticException算术异常类
int a=5/0;
一个整数“除以零”时,抛出异常
3.NullPointerException空指针异常类
String s=null; int size=s.size();
当应用程序试图在需要对象的地方使用 null 时,抛出异常
4.ArrayIndexOutOfBoundsException数组下标越界异常
int[] num = ne int[5]; System.out.println(num[5]);
当使用的数组下标超出数组允许范围时,抛出该异常
5.NegativeArraySizeException数组负下标异常
String[] ss=ne String[-1];
数组大小为负值异常。当使用负数大小值创建数组时抛出该异常
如应用程序试图创建大小为负的数组,则抛出异常
thro
- 表示方法内抛出某种异常对象
- 如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 thros 语句或者在方法体内 try catch 处理该异常,否则编译报错
- 执行到 thro 语句则后面的语句块不再执行
thros
- 方法的定义上使用 thros 表示这个方法可能抛出某种异常
- 需要由方法的调用者进行异常处理
举例
void doA(int a) thros Exception1,Exception3{
try{
......
}catch(Exception1 e){
thro e;
}catch(Exception2 e){
System.out.println("出错了!");
}
if(a!=b)
thro ne Exception3("自定义异常");
}
7.finally子句的作用
finally子句是异常捕获的一部分
try{
}catch(Exception e){
}finally{
}
三部分的执行顺序是try块检测并抛出异常,然后由catch子句捕获,执行finally子句。
try块必须有,catch和finally子句不一定全都必须,可以二选一,也可都有。
finally是这个组合语句的统一出口,一般用来进行一些善后清理操作,例如清理资源、释放连接、关闭文件、管道流等操作。它是可选的部分,但一旦选定,必定执行。
public class TestFinally {
public static void main( string[] args) {
system.out.printLn(testFinally());
}
private static int testFinally() {
int temp = 100;
try {
system.out. println( "Try " );
return ++temp;//return的结果被暂存
}
finally {
temp = 1;
system.out.println( "Finally" );
}
}
}
结果为
Try Finally 101
finally代码块在return语句运行后执行的。return结果被暂存,等finally代码块执行结束后再将之前暂存的结果返回。
空调维修
- 我的世界电脑版运行身份怎么弄出来(我的世界
- 空调抽湿是什么意思,设置抽湿的温度有什么意
- 方太燃气灶有一个打不着火 怎么修复与排查方法
- 夏季免费清洗汽车空调的宣传口号
- 清洗完空调后出现漏水现象
- iphone6能玩什么游戏(iphone6游戏)
- 如何设置电脑密码锁屏(如何设置电脑密码锁屏
- win10删除开机密码提示不符合密码策略要求
- 电脑w7显示不是正版(w7不是正版怎么解决)
- 万家乐z8热水器显示e7解决 怎么修复与排查方法
- 1匹空调多少瓦数(1匹空调多少瓦)
- 安卓手机连接电脑用什么软件好(关于安卓手机
- 电脑网页看视频卡是什么原因(爱拍看视频卡)
- 华帝燃气灶点火器一直响然后熄火怎么办:问题
- 电脑壁纸怎么换(关于电脑壁纸怎么换的介绍)
- 冬天空调的出风口应该朝什么方向(冬天空调风