首页 > 代码库 > JAVA学习第十九课(java程序的异常处理 (二))
JAVA学习第十九课(java程序的异常处理 (二))
异常处理的捕捉形式:
这是能够对异常进行针对性处理的方式
六、try、catch的理解
详细格式:
try { //须要被检測异常的代码 } catch(异常类 变量)//改变量用于接受发生异常的对象 { //处理异常的代码 } finally { //一定会被运行的代码 }
这三个代码块是一个总体。
try是尝试,catch捕捉,finally终于化
什么时候用try&catch。什么时候用抛?
在定义功能时,假设这个问题你能够处理的了,那么就用try&&catch。处理不了那么就用抛
代码演示:
import java.util.*; class FuException extends Exception { FuException() { } FuException(String s) { super(s);//Exception有 //System.out.println(s); } } class ExceptionDemo {//要么捕捉,要么抛出 public int method(int[] arr,int index) throws FuException { if(index<0) { throw new FuException("The index is fushu"); } return arr[index]; } } public class Main { public static void main(String[] args)//throws FuException { int[] a = new int[10]; ExceptionDemo C = new ExceptionDemo(); try { int num = C.method(a,-2); System.out.print("num"+num); } catch (FuException e) { System.out.println("角标为负数啦!"); //e对象可用可不用,以下是一些经常使用的方法 System.out.println("Message:"+e.getMessage()); System.out.println("string:"+e.toString());//toString可省略 //打印异常信息 e.printStackTrace();//jvm默认的异常处理机制就是调用异常对象的这种方法 } } }
/*真正建立日志文件
*log four(java; ; )
*{
*
*}
*/其简写形式:log4j
七、多catch情况
假设在程序处理时。抛出了多个异常
import java.util.*; class FuException extends Exception { FuException() { } FuException(String s) { super(s);//Exception有 //System.out.println(s); } } class ExceptionDemo { public int method(int[] arr,int index) throws FuException,NullPointerException { if(index<0) { throw new FuException("The index is fushu"); } if (arr==null) { throw new NullPointerException("没有数组实体");//可自己定义 } return arr[index]; } } public class Main { public static void main(String[] args)//throws FuException { int[] a = new int[10]; ExceptionDemo C = new ExceptionDemo(); try { int num = C.method(a,2); System.out.print("num"+num); } catch (FuException e) { System.out.println("角标为负数啦!"); } catch (NullPointerException e) { //e.printStackTrace(); System.out.println("Message:"+e.getMessage()); } //多catch情况,假设有以下catch情况。不能房最上面。会接受全部对象 catch (Exception e) { //父类的catch房最以下,否则编译失败 //假设实在出现已有catch以外的情况,虚拟机会处理 } } }
八、异常的处理原则
try究竟什么时候用?
最根本的核心:仅仅要使用了声明异常的方法,就要try,仅仅要代码中有抛出异常的动作,假设能处理就用try。见到了异常就处理,没有异常就不须要处理。注意:没有错误。非要写try,不仅没意义。还存在弊端。假设真的要处理异常。可是不知道是什么异常,那么仅仅能写Exception。一旦未知异常真的发生了,可是却有个预先处理的方式 ,处理什么不知道,这个异常被处理掉了,一旦处理掉了,就相当于异常被隐藏,可是程序还在正常运行。所以,仅仅要没说有问题,就不处理,仅仅要问题发生了。看到了。再考虑问题是否要处理
异常处理的原则:
1.函数内部假设抛出需要检測的异常。函数上必需要声明。否则必须在函数内部用try&&catch捕捉,否则编译失败
2.假设调用到了声明异常的函数,要么try&&catch,要么throws。否则编译失败
3.什么时候catch。什么时候throws?
功能内部能够解决,用catch
解决不了,用throws,由调用者解决
4.一个功能假设抛出了多个异常,那么调用时必须相应多个catch,进行针对性的处理
(内部有几个须要检測的异常,就要抛几个异常,抛几个。就catch几个)
九、finally代码块
/*finally的应用:
* 用到finally最多的地方,比方数据库
* 比如:打开百度。搜索
* 连接数据库
* 查询:假如Exception了,查询过程中出问题
* 关闭连接
*假设出现异常,不关闭连接,还在浪费数据库资源,所以不管是否出现异常,关闭连接一定要运行
*进而释放资源,故关闭连接定义在finally里
*/
所以:凡是有资源须要关闭。一定要定义在finally里。
try。catch,finally代码块组合的方式:
1、try,catch,finally(三个都有常见)
2、try、catch,没有必要资源须要释放时,就不是必需定义finally
3、try、finally 异常无法直接catch处理,可是资源一定要关闭
void show()//throws Exception,不用声明。由于catch已经处理了 { try { throw new Exception(); } //有catch catch { ..... } }
void show()throws Exception//没catch,就要声明 { try { throw new Exception(); } //没catch finally //连接资源,出现异常,可是这个异常不一定就要处理,可是资源一定要关闭,由于在内部开辟的。别人不知道 { .... } }
JAVA学习第十九课(java程序的异常处理 (二))