异常的引入:
当程序出现一些问题的,可以是严重问题,可以是一种异常,将这些通常为Throwable
Throwable
error
exception
不抗力因素 : error: 属于严重问题 内存溢出了 (加载页面中大量图片的时候,程序会挂掉---使用第三方的框架去处理:ImageLoader
编译时期异常:
只要出现的不是运行时期异常,统称为编译时期 日期的文本格式---解析 java.util.Date类型:ParseException:解析异常
编译时期异常:开发者必须处理!运行时期异常 : RuntimeException
编译通过了,但是开发者代码不严谨(NullPointerExceptino等等...)
异常的处理分为两种:
1)try...catch...finally (标准格式) : 捕获异常 常用在项目中
2)throws ... 抛出异常 常用在一些小的异常中
变形格式...
try...catch...
try...catch...catch...
catch....
try..catch的标准形式:
try{ 一些代码 try里面的代码越少越好 代码包含了可能会出现问题的代码 }catch(异常类 异常类对象){ try出现异常了,描述的异常刚好就是catch的异常类,就会执行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(){ //异常处理 }
注释:两个异常的处理:直接进行处理,不用分别进行try..catch,从上往下走,由小变大(类级)。
Jdk7以后出现另一种方式处理多个异常:
try{
可能出现问题的代码;
}catch(异常类名1 | 异常类名2 |... 对象名){
处理异常
}
public class Demo { public static void main(String[] args) { int a=10; int b=0; int[] arr= {1,2,3}; try { System.out.println(a/b); System.out.println(arr[3]); }catch(ArithmeticException|ArrayIndexOutOfBoundsException e) { System.out.println("程序出了问题"); } } }编译时期异常和运行时期 异常的区别?
编译时期异常:开发者必须进行显示处理,不处理,编译不能通过,
运行时期异常:无需进行显示处理,可以像编译时期一样进行处理
处理异常的第二种方式:使用throws 抛出异常 (跟在方法的后面)
格式:xxx 返回值 方法名() throws 异常类名{
}
标准格式: try{ ... }catch(异常类 对象){ // 异常处理 } 执行try里面的代码
如果出现了问题,它会通过代码的问题创建一个异常对象,然后通过异常对象和catch里面的异常类是否一致
如果一致的情况,就会出现catch里面的代码,执行Throwable里面的方法
异常中常用的方法:
public String getMessage() :消息字符串
注释:如果出错了try中的内容出错了,就会执行catch里面的方法,则会返回一个字符串来说明出错的原因。
public String toString(): 异常的简短描述 ": ":由冒号和空格组成
注释:相当于全路径名加上一个“: ”再加上getMessage方法。
public void printStackTrace():返回值void 直接调用, 包含了消息字符串,还有": "信息描述,具体出现异常的代码定位以及定位 的源码上
注释:相当于toString方法加上一个源代码和现有代码出错的定位。
final,finally,finalize的区别?final 可以修饰类,该类不能被继承;可以修饰变量,该变量是常量;可以修饰成员方法,该方法重写
finalize:gc():运行垃圾回收器,实际是调用finalize()方法,和垃圾回收器有关系
finally:在io,数据库中以及后面对数据库操作(DBUtuls/c3p0/Hibernate/MyBatis)里面中释放资源的,这里面的方法 是必须执行的。