首页 > 代码库 > Java异常处理
Java异常处理
一java异常分类
Java异常:
(1)Error:java虚拟机无法解决的严重问题
(2)Exception:空指针异常 访问不存在的文件 网络连接中断
Error和Exception都继承子java.lang.throwable
Error类型:
1.java.lang.StackOverflowError
public class TestError {
public static void main(String[] args) {
main(args);
}
}
2.java.lang.OutOfMemoryError
public static void main(String[] args) {
byte[] b=new byte[10241024600];
}
Exception:
//常见的运行时异常
//1.数组下标异常java.lang.ArrayIndexOutOfBoundsException: 10
@Test
public void test(){
int []i=new int [10];
System.out.println(i[10]);
}
//2.算数异常:arithmeticException
@Test
public void test2(){
int i=10;
System.out.println(i/0);
}
//3.类型转换异常:java.lang.ClassCastException: java.util.Date cannot be cast to
java.lang.String
@Test
public void test3(){
Object obj=new Date();
String str=(String)obj;
}
//4.空指针异常java.lang.NullPointerException
@Test
public void test4(){
Object s=new String("abc");
s=null;
System.out.println(s.toString());
}
//5.编译时运行
@Test
public void test5() throws Exception{
FileInputStream fis=new FileInputStream(new File
("Hello.txt"));
int b;
while((b=fis.read())!=-1)
{
System.out.println((char)b);
}
}
二.如何处理Exception异常
java提供异常的抓抛模型
第一步:
"抛":当我们执行代码时,一旦出现异常,就会在异常的代码处生成一个对应的异常类对象
,并将此对象抛出(自动抛出,手动抛出)
>一旦抛出次异常类的对象,那么程序将终止执行
>此异常类的对象抛出给方法的调用者
2."抓":抓住上一步抛出来的异常类的对象,如何抓即为异常处理的方式
提供两种方式用于处理异常类的对象
>处理方式一:
try{
//可能出现异常的代码
}
catch(Exception ex){
}
catch(Exception ex2){
}
finally{
}
注:
1.try内声明的变量,类似于局部变量,除了try语句,就不能被调用
2.finally语句是可选的
3.catch语句内部是对异常对象的处理
有两个可用的方法: getMessage() printStackTrace();
4.可以有多个catch语句,try中抛出的异常类对象从上往下匹配catch中的异常的类型,一旦满
足,就执行catch语句中的代码,执行完后,跳出其后的多条catch语句
5.如果异常处理了,那么其后的代码继续执行
6.若catch中多个异常类型是"并列"关系,顺序都可以;
如果为包含关系,那么子类在上面
7.finally语句中一定会被执行,不管try中,catch中语句是否有异常或者return语句
8.try catch是可以相互嵌套的
>处理方式二:
在方法声明中用throws语句声明抛出异常的列表,throws声明的异常类型可以是方法中产生的异
常 类型,也可以是它的父类
格式:public static void method2() throws IOException
当在方法内部出现异常的时候,会抛出一个异常的对象给方法的调用者
异常的对象可以逐层向上抛,直至main中,当然在向上抛的过程中可以再通过try-catch进行处
理
三.对于运行时异常,可以不显式的进行处理
对于编译时异常,必须要进行处理
总结:java的异常处理采用 抓抛 模型
1.抓:异常的处理,有两种方式(try-catch-finally throws+异常类型)
2.抛:一旦执行过程中,出现异常,会抛出一个异常类的对象(自动抛出 手动抛出:throw+异常
项 )
>异常类既可以是现成的异常类,也可以是自己创建的
四.
如何自定义异常类:
//1.让自定义的异常类继承现有的异常类
public class MyException extends RuntimeException {
//2.提供一个序列号,提供几个重载的构造器
static final long serialVersionUID = -7034897190745766939L;
public MyException(){
}
public MyException(String msg){
super(msg);
}
}
子类重写父类的方法,其抛出的异常类型只能是被重写的方法的异常类的子类或者异常类。即子类
抛出的异常范围要小于父类。
Java异常处理