Throwable 类是 Java 语言中所有错误或异常的超类
当程序出现一些问题时,可以是严重问题,可以是一种异常
Throwable
error
Exception
error:不可抗力因素, 属于严重问题 例如内存溢出了 (加载页面中大量图片的时候,程序会挂掉---使用第三方的框架去处理:ImageLoader)
Exception:
1>编译时期异常:只要出现的不是运行时期异常,统称为编译时期 例如:日期的文本格式---解析 java.util.Date类型:ParseException:解析异常
注意:编译时期异常:开发者必须处理!
2>运行时期异常:RuntimeException,编译可以通过,是由于开发者代码不严谨导致的(NullPointerExceptino等等...)
异常的处理分为两种:
1)try...catch...finally (标准格式) :捕获异常
2)throws ... 抛出异常
一:try....catch.....
变形格式...
try...catch...
try...catch...catch...
catch....
1>若只有一个异常的处理格式:
try{
可能出现问题的代码
}catch(异常类 异常类对象){
如果try中的代码出现的异常,常刚好就是catch的异常类,就会执行catch里面代码
//处理异常代码
}
2>若多个异常的处理格式:
try{
可能出现问题的代码
}catch(异常类名1 对象名1){
//异常处理
}catch(异常类名2 对象名2(){
//异常处理
}
注意: 1>try里面的代码越少越好
2>catch中必须要有内容,哪怕是一个提示,否则没有意义
3>若try中有多个异常,只执行一个 就结束try...catch语句
Jdk7以后出现另一种方式处理多个异常:
try{
可能出现问题的代码;
}catch(异常类名1 | 异常类名2 |... 对象名){
处理异常
}
编译时期异常和运行时期异常的区别?
编译时期:开发者必须进行显示处理,不处理,编译不能通过,
运行时期异常:无需进行显示处理,可以像编译时期一样进行处理
如果catch里面有return 语句,finally中的代码还会执行,是在return语句之前执行还是return后执行?
finally中代码是一定会执行的,是在return前
代码:
public class FinallyTest {
public static void main(String[] args) {
System.out.println(getInt());
}
private static int getInt() {
int a ;
try {
a = 10 ;
System.out.println(a/0);
a = 20 ;
}catch(Exception e) {
a= 30 ;
return a ;
/**
* try的代码出现问题了,执行catch中的语句,30赋值a,
* return 30(已经形成了一个回路径)finally代码一定会执行(除非Jvm) a = 40 ,在fianlly外面
* 有return a: a记录回路径的那个a,返回30
*/
}finally {
//除非jvm退出了
a = 40 ;
}
return a;//30
}
}
二:使用throws 抛出异常 (跟在方法的后面)
格式:
xxx 返回值 方法名() throws 异常类名{
}
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:
抛出的一个异常对象
在语句体中抛出的,由语句体进行处理
它表示抛出异常的肯定性
自定义异常类,两种方式
1)自定义一个类,这个继承自Exception
2)继承RuntimeException
异常中的注意事项:
子类继承父类的时候的注意事项
1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类
2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch