java.lang.throwable包下处理
分为两类:Error:错误,程序中不处理
Exceptio(java.lang.Exception):异常,编译时异常( 非RunTImeException):执行javac.exe Eclipse会显示出来
运行时异常(RunTImeException):执行java.exe异常 Eclipse不会显示出来
常见的异常形式:
运行时异常
1.数组下标越界;输入的数据超出或者不在数组空间。如,System.out.println(i[-1]);
public class TestError {
publicstatic void main(String[] args) {
//java.lang.StackOverflowError超出范围
//main(args);
//java.lang.OutOfMemoryError
byte[] b = new byte[1024*1024*600];
}
}
2.算术异常ArithmeticException:不符合计算规则。如,分母为零。
3.空指针异常NullPointerException:对空的对象使用类的方法。
注意在调用某个对象时它可能存在空的状态。
4.类型转换异常:ClassCastException:不符合类型转换的标准。String str=(String new Date());
非运行时异常
public void testInputStream() {
FileInputStream fi= null;
try {
fi = new FileInputStream(new File("d:\\io练习\\myname"));
int b;
while ((b = fi.read()) != -1) {
System.out.print((char) b);
}
System.out.println(“找不到文件");
} catch (IOException e1) {
System.out.println(e1.getMessage());
} finally {
try {
fi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
异常处理的方法:
捕获异常:try catch语句
抛出异常throw 语句
1.try {
// 可能发生的异常
// 异常之后的代码都不会被执行
} catch (Exception e1) {
e.printStackTrace(); // 异常处理代码
} catch(Exception e2){
e.printStackTrace();//异常处理代码
}
........
finally {
// 不管有没有发生异常,finally语句块都会被执行
}
一个try可以对应多个catch。
2.throw语句
在可能异常的方法后面写上throws 某一个Exception类型,如throws Exception,把异常抛出。
a.try语句中的内容相当于局部变量,只在try代码块内有效,
b.catch代码块中放对异常事故的处理方法,
>getMessage(); printStackTrace();
c.处理完之后执行finall语句中的语句。
d.try-catch是可以嵌套的
若catch中多个异常类型是"并列"关系,位置随意。
若catch中多个异常类型是"包含"关系,要将子类放在父类的前面处理。否则出错。