异常指Java程序运行中遇到的非致命性错误,而不是编译时期的语法错误,比如0溢出、数组越界、文件找不到等。
Java面向对象的方式来处理异常,异常也被看成对象,和一般对象也没有什么区别,但异常必须是Throwable的类及其子类所产生的对象的实例。它也像其他对象一样封装了数据和方法。
Throwable对象在定义中包含一个字符串信息,而这个属性可以被所有的异常类继承,Java程序中,异常处理的机制为:抛出异常、捕捉异常。
当程序出现一些问题的,可以是严重问题,可以是一种异常,将这些通常为Throwable
Throwable 类是 Java 语言中所有错误或异常的超类1)张三骑车去旅行,山路崩塌了,不能前行了----->不可抗力因素error: 属于严重问题 内存溢出了 (加载页面中大量图片的时候,程序会挂掉---使用第三方的框架去处理:ImageLoader)
2)张三骑车去旅行,骑着发现轮胎没气了------->需要检查的问题。属于编译时期异常:只要出现的不是运行时期异常,统称为编译时期 日期的文本格式---解析 java.util.Date类型:ParseException:解析异常
编译时期异常:开发者必须处理!
异常的处理分为两种:
(1)try...catch...finally (标准格式) :捕获异常变形格式的第一种(1) try...catch...
try{
一些代码如何处理多个异常两个或两个以上的异常的时候怎么办?此时采用变形格式 (2) 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...finally
finally语句体是一定会执行的,除非是Jvm退出了
问题:如果catch里面有return 语句,finally中的代码还会执行,是在return语句之前执行还是return后执行?
答:finally中代码是一定会执行的,是在return前
程序示范如下:
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
}
异常中的注意事项:
* 子类继承父类的时候的注意事项
* 1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类
* 2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch
*/
异常类名称 | 异常原因 |
ArithmeticException | 数学错误,被0除 |
ArraylndexOutOfBoundsException | 数组下标越界 |
ArrayStoreException | 程序试图在数组中存储错误类型的数据 |
ClassCastException | 类型强制转换异常 |
IndexOutOfBounchsException | 当某对象的索引超出范围时抛出异常 |
NegativeArraySizeException | 建立元素个数为负的数组异常类 |
NullPointException | 空指针异常 |
NumberFormatException | 字符串转换为数字异常类 |
SecurityException | Applet试图执行浏览器的安全设置不允许的动作 |
StringIndexOutBounchsException | 程序试图访问字符串中字符不存在的字符位置 |
OutOfMemoryException | 分配给新对象的内存太小 |
SockedException | 不能正常完成Socked操作 |
ProtocolException | 网络协议有错误 |
ClassNotFoundException | 未找到相应的异常类 |
EOFException | 文件结束异常 |
FileNotFoundException | 文件未找到异常 |
illegalAccessException | 访问某类被拒绝时抛出的异常 |
InstantiationException | 试图通过new Instance()方法创建一个抽象 类或抽象接口的实例时出现的异常 |
IOException | 输入、输出异常 |
NoSuchFileException | 字段未找到异常 |
NoSuchMethodException | 方法未找到异常 |
SQLException | 操作数据库异常 |