1. 使用try{}catch(){}对可能出现异常的代码进行捕获
int a=1;
int b=0;
try//放入可能会出现异常的代码,对其进行异常的捕获
{
double x=a/b;
System.out.println("x="+x);
}
catch(Exception e)//当出现异常时执行的语句块
{
System.out.println("出现了异常");
}
finally//一定会执行的代码,一般用于数据库的关闭和资源的释放
{
}
有异常捕获的三种格式
(1). Try{}
Catch(){}
Finally{}
(2). Try{}
Catch(){}
Catch(){}
....
(3). Try{}Finally{}
catch(){}的作用为处理异常,当try{}中有异常时,必须有catch(){}进行处理或者函数声明异常
Finally{}一定会执行的代码,一般用于数据库的关闭和资源的释放
(1).最后不加catch(Exception e){},声明具体的异常,这样处理可以更具体并一定会发现出现的异常并对其进行处理
(2).最后加catch(Exception e){},处理未知的异常,但会隐藏某些异常,使程序发生无法想象的错误
若要加catch(Exception e){}则必须作为最后的catch(){},由于所有的异常类为Exception的子类,若将catch(Exception e){}放前
则异常发生时均会执行catch(Exception e){} 中的语句块
每次异常出现时只能处理一个异常(当发生异常时直接跳出执行相应的catch(){}中的语句块)
2. 在对可能发生异常的方法进行异常的抛出(抛出的异常会交给调用此方法的类处理,当方法调用有异常抛出的方法时,一定要对其进行try{}catch{}捕获或者将异常抛出,当一直抛给上一级时,最终会由java虚拟机处理,调用相应异常的方法显示异常信息)
class Demo1
{
int div(int a,int b)throws Exception//通过throws的关键字声明此方法可能会出现异常
{
if(b==0)
throw new Exception();//抛出异常
else
return a/b;
}
}
throws与throw的区别
1. throws在函数上声明,throw在函数内声明
2. throws后面跟异常类,可多个,用逗号分隔,throw后面跟异常对象
当函数内部出现抛出异常时,函数上必须声明抛出的异常(除了继承RuntimeException异常的类)
Exception 中有一个特殊的子类,RuntimeException(运行时异常)
表示代码本身存在BUG但只有运行操作后才会出现问题,而使程序不能运行,如果用try{}catch{}语句进行捕获时,并不能解决bug所带来的问题
如果在函数内抛出该类或该类的子类时,函数上可以不声明
如果函数上声明了该类或该类的子类时,调用时可以不对其进行捕获或抛出
自定义异常时,如果该异常发生时使程序无法继续运算时,则自定义异常类继承RuntimeException类
由于RuntimeException(运行时异常)会使程序无法运行,因此不对其进行处理,使程序直接直接显示异常,程序员则在相应地方进行修改
非RuntimeException(编译时异常)
在编译过程中被检测到的异常,要用try{}catch{}捕获或将异常抛出
自定义异常:对程序中可能出现的问题进行封装
定义类继承Exception或RuntimeException
1. 让自定义类具备可抛性
2. 让该类操作异常的共性方法
当要自定义异常类时,可使用父类的功能
异常信息传递给父类的构造函数
Class MyException extends Exception
{
MyException(String Message)
{
Super(Message);//调用父类的构造函数
}
}
1. 子类覆盖父类时,如果父类的方法抛出异常,子类则只能抛出父类的异常或该异常的子类
2. 如果父类的方法抛出过个异常时,则子类在覆盖方法时,只能抛出父类方法异常的子集
3. 如果子类方法有新的异常时,则只能用try{}catch{}语句进行捕获而不能讲异常抛出