异常的处理
当程序出现一些问题的,可以是严重问题,可以是一种异常,将这些通常为Throwable
Throwable 类是 Java 语言中所有错误或异常的超类
Throwable
error
exception
举例:
张三去山上旅行
1)张三骑车去旅行,山路崩塌了,不能前行了----->不可抗力因素
2)张三骑车去旅行,骑着发现轮胎没气了------->需要检查的问题
3)骑着,山路有石子,他就非得往石子上骑,导致车胎没气了---->自己原因造成的,no zuo no die
不抗力因素----->error:属于严重问题 内存溢出了 (加载页面中大量图片的时候,程序会挂掉---使用第三方的框架去处理:ImageLoader)
异常:
编译时期异常:只要出现的不是运行时期异常,统称为编译时期 日期的文本格式---解析 java.util.Date类型:ParseException:解析异常
编译时期异常:开发者必须处理!
运行时期异常:RuntimeException
编译通过了,但是开发者代码不严谨(NullPointerExceptino等等...)
异常的处理分为两种:
1)try...catch...finally (标准格式) :捕获异常
2)throws ...抛出异常
变形格式...
try...catch...
try...catch...catch...
catch....
try{
一些代码
try里面的代码越少越好
代码包含了可能会出现问题的代码
}catch(异常类 异常类对象){ //在括号里面实际上就上是创建该异常对象的过程.相当于
// 异常类 异常对象 = new 异常对象();
try出现异常了,描述的异常刚好就是catch的异常类,就会执行catch里面代码
//处理异常
如何处理多个异常两个或两个以上的异常的时候怎么办?
try{
可能出现问题的代码
}catch(异常类 对象名){
处理异常的代码
}
try{
可能出现问题的代码
int[] arr = {1,2,3} ;
Sop(arr[3]);
int a = 10 ;
int b =0 ;
Sop(a/b) ;
}catch(异常类名1 对象名1){
//异常处理
}catch(异常类名2 对象名2(){
//异常处理
}
异常类中的爷爷类一定要放在后面(例如 Exceptiong类一定要放在ArithmeticException 类后面)
编译时期异常和运行时期异常的区别?
编译时期:开发者必须进行显示处理,不处理,编译不能通过,
运行时期异常:无需进行显示处理,可以像编译时期一样进行处理
处理异常的第二种方式:使用throws 抛出异常 (跟在方法的后面)
xxx返回值 方法名() throws 异常类名{
}
抛出异常这里有一个比较形象的描述
你给我一段语句,我就返回正确值;如果语句有问题,我就喊一声“格式有问题!”。
这里的throws,就相当于实现了“喊一声”的功能。
如果try语句中出现了问题,会通过代码创建一个异常对象,然后和catch语句中的类进行比较是否一致,一致就输出Cath里面里面的代码,执行Throwable里面的方法
public String getMessage() :消息字符串 //简单描述错误的原因
public String toString(): 异常的简短描述 ": //简单描述错误的类型
public void printStackTrace():返回值void 直接调用, 包含了消息字符串,还有": "
信息描述,具体出现异常的代码定位以及定位的源码上( 该方法包含最后显示的结果包含了上面两个方法的显示)
final,finally,finalize的区别?
//final 可以修饰类,该类不能被继承;可以修饰变量,该变量是常量;可以修饰成员方法,该方法重写
//finalize:gc():运行垃圾回收器,实际是调用finalize()方法,和垃圾回收器有关系
//finally:在io,数据库中以及后面对数据库操作(DBUtuls/c3p0/Hibernate/MyBatis)里面中释放资源的
throw:
表示也是抛出异常,抛出的一个异常对象 (throw new 异常类名() :匿名对象的方式)
throws和throw的区别?
throws:也是表示抛出异常,它后面跟的异常类名,并且可以多个异常类名中间逗号开
举例:
public void show() throws IoException,ClassNotFoundException{...}
在方法上抛出,由调用者处理
它表示抛出异常的可能性
throw:抛出的一个异常对象
在语句体中抛出的,由语句体进行处理
它表示抛出异常的肯定性
try...catch...finally
finally语句体是一定会执行的,除非是Jvm退出了
自定义一个异常类
自定义异常类,两种方式
1)自定义一个类,这个继承自Exception
2)自定义一个类,继承RuntimeException
异常中的注意事项:
子类继承父类的时候的注意事项
1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类
2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch