异常处理的初步认识

学习java的这段时间里,碰到的异常已经数不胜数,认识的异常却只有两种,碰到最多的异常也是这两种——空指针异常(NullPointerException)与数组越界异常(ArrayIndexOutOfBoundsException)。对于这两种经常跟我们打交道的异常,相信大家已经再熟悉不过了——能让人无限纠结的东西,需要不被熟悉的理由吗?今天算是对异常有了一些初步了解,只是一些基础问题的小总结,以便与大家交流分享。
异常可以分为以下两种:
a checked exception(非运行时异常)
b unchecked exception(Runtime Exception(运行时异常))注:对于这类异常,我们可以不对其进行处理。
对于非运行时异常,处理的方法有两种:
一,try{...}catch(..){...}finally{...},finally语句常常会省略。
当程序无异常时,会执行完try的全部语句,并跳过catch语句去执行finally语句,当程序有异常时,对于它的执行过程,我们先看一组代码:
public class FirstException {
public static void main(String []args){
try{
int a=1;
int b=0;
int c=a/b;
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("异常处理完毕");
}
}
}

执行结果如下:
java.lang.ArithmeticException: / by zero
at Myfirstexception.FirstException.main(FirstException.java:8)
异常处理完毕

当程序执行到语句c=a/b时,由于分母为零,会产生异常,这时首先会创建一个异常对象,并将该对象赋给catch语句中的Exception e,然后调用e的异常处理法。最后执行finally语句。[color=red]值得注意的一点,此时程序会跳过语句c=a/b后面的语句,也就是跳过产生异常的语句后面所有的语句,直接进入catch。[/color]
public class FirstException {
public static void main(String []args){
try{
int a=1;
int b=0;
int c=a/b;
System.out.println("该语句被执行?");
System.out.println("该语句被执行?");
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("异常处理完毕");
}
}
}

执行结果:
java.lang.ArithmeticException: / by zero
at Myfirstexception.FirstException.main(FirstException.java:8)
异常处理完毕

注意到,此时两条打印语句并没有被执行!
二,方法()+throws Exception{...throw new Exception}
先看一组代码:
public class FirstException {
public void dealwith() throws Exception{
System.out.println("hello!");
throw new Exception();
}
public static void main(String [] args) throws Exception{
FirstException fe=new FirstException();
fe.dealwith();
}
}

执行结果:
hello!
Exception in thread "main" java.lang.Exception
at Myfirstexception.FirstException.dealwith(FirstException.java:21)
at Myfirstexception.FirstException.main(FirstException.java:25)

简单来讲,这种处理方法就是猛烈地向上抛异常。throws跟在方法名后面接一个异常的类名,throw后面接具体的对象。当程序执行时,产生异常的语句把异常抛给调用它的语句去处理,调用语句可以选择用第一种方法处理异常,也可以继续往上抛,如果继续抛下去,异常就会交给虚拟机处理。
[color=red]注意一下,两种方法的不同之处,抛出异常的方法不会执行异常后面的语句,而try{...}catch(){...}却会执行catch语句后面的语句。[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值