java 异常处理

1 Java异常机制用到的几个关键字

1.1 try        

        用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。

1.2 catch   

用于捕获异常。catch用来捕获try语句块中发生的异常。


1.3 finally  

        finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。

  • 只有在finally块执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果在try里面有System.exit(0)这样的语句,System.exit(0)是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然 finally 语句也不会被执行到。
  • 如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

1.4 throw   

        用于抛出异常。

1.5 throws 

        用在方法签名中,用于声明该方法可能抛出的异常。

2 异常类结构体系

      

2.1 JAVA对不同的异常类采取不同的处理策略。

2.1.1 java.lang.Error

        java.lang.Error意味着是很难恢复的严重错误,一般不由程序处理。

2.1.2 java.lang.Exception

  • 继承RuntimeException类
        RuntimeException意味着程序设计或实现问题,例如数组使用越界,算术运算异常(例如除0运算),空指针异常(即访问没有初始化的指针)等.正确设计与实现的程序不应该产生这些异常,处理的策略是纠正错误。
        注意:RuntimeException异常不是必须被catch,就是说在声明语句returnType methodName([paramlist])throws exceptionlist中声明的异常,Exception一定要被处理,而RuntimeException异常则可以不被处理。
  • 继承Exception
        其他的异常通常是由环境因素引起的,如文件不存在,无效URL等.这类是由用户的误操作引起的,可以在异常处理中处理,例如,提示用户进行正确操作.它是编译器可以“感知”的异常,所以程序被要求必须捕获并处理这些异常。

例子 :

import java.io.*;
import java.util.*;
class B{
void s()throws RuntimeException{
throw new RuntimeException();
}
}
public class M{
public static void main(String args[])
{
B b=new B();
try
{
b.s();
}
finally
{
System.out.print(" here2");
}
}
}
import java.util.*;
class B{
void s()throws RuntimeException{
throw new RuntimeException();
}
}
public class M{
public static void main(String args[])
{
B b=new B();
try
{
b.s();
}
finally
{
System.out.print(" here2");
}
}
}

能产生结果 here2Exception in thread "main" java.lang.RuntimeException
                    at B.s(M.java:6)
                  at M.main(M.java:18)

import java.io.*;
import java.util.*;
class B{
void s()throws Exception{
throw new Exception();
}
}
public class M{
public static void main(String args[])
{
B b=new B();
try
{
b.s();
}
finally
{
System.out.print(" here2");
}
}
}
import java.util.*;
class B{
void s()throws Exception{
throw new Exception();
}
}
public class M{
public static void main(String args[])
{
B b=new B();
try
{
b.s();
}
finally
{
System.out.print(" here2");
}
}
}

编译时则会报错    M.java:18: 未报告的异常 java.lang.Exception;必须对其进行捕捉或声明以便抛出
b.s();
   ^
1 错误 
《Effective Java》中给出的建议是:对于可以恢复的条件使用被检查异常,对于程序错误使用运行时异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值