java 异常处理

在java的异常处理机制中,有两种异常处理方式,一种是throw往外抛异常,一种是try...catch...捕获异常处理异常。那么一般情况下,什么时候用throw什么时候用try....catch...呢?

  有些初学者,只要是异常他们都使用try...catch...,就是什么异常他们都捕获处理,可是很多都是在catch语句块中还是选择使用throw new Exception(e);语句把异常往外抛。其实我是不赞同这中做法的。我的理解是这样的在java程序中,异常的处理应该是严谨一点的比较好,尽管不能很完善的去把异常处理好,但是也尽量的把我们自己写程序有可能的异常处理好了,让后来的用户或者以后自己代码重用的时候,方便处理。

  异常分两种大的异常类型,运行异常和受检查异常,这两种异常的区别:

  1、运行时异常

  运行异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。

  2、受检查异常

  除了运行异常外,其他异常都属于受检查异常,这种异常的特点是要么用try...catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。

  3、两者的区别

  运行异常表示无法让程序恢复运行的异常,导致这种异常的原因通常是由于执行了错误的操作。一旦出现错误,建议让程序终止。

  受检查异常表示程序可以处理的异常。如果抛出异常的方法本身不处理或者不能处理它,那么方法的调用者就必须去处理该异常,否则调用会出错,连编译也无法通过。当然,这两种异常都是可以通过程序来捕获并处理的。

  对于运行异常,建议不要用try...catch...捕获处理,应该在程序开发调试的过程中尽量的避免,当然有一些必须要处理的,自己知道了那个部分会出现异常,而这种异常你要把它处理的你想要的结果,例如:空值处理。

  对于受检查的异常,在编译的时候不能通过,就只能老老实实的用throw或者try..catch...来处理,那么用什么情况下用那种方式呢?看下面的例子:

  public static Connection getConn(){
  try {
  Connection conn =
  DriverManager.getConnection(url,user,pwd);
  return conn;
  } catch (SQLException e) {
  return null;
  }
  }

  明显的出现一个问题就是,出现了受检查的异常直接用try...catch...捕获,可是这种捕获有作用么,基本上没有什么有用的意义,还不如抛出去的好直接告诉调用者,这个方法会出现SQLException,不然调用者用这个方法结果返回了一个null,就完全不知道发生了什么事。

  其实在try...catch...语句块中,一般的受检查异常是很难在自己方法内处理的,那么如果出现了异常怎么办,一般的做法是在catch语句块中庸log4j记录异常,给后台工作人员。

  异常处理的原则上是,能自己处理的不往上抛,尽量把异常细化不要什么异常都直接用Exception来代,在一个try语句块中尽量少的异常。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MD5加密代码(工具类)

    package com.test.system.util; import java.security.MessageDigest; import java.s...

    用户1220053
  • Spring的一些注解解析

    @Repository、@Service、@Controller 和 @Component 将类标识为Bean spring 自 2.0 版本开始,陆续引入了一...

    用户1220053
  • 2018年Java学习体系

    一、JavaSE 1、Java开发环境搭建 2、Java基础语法 3、Java面向对象 4、异常 5、数组/算法 6、常用类 7、集合/数据结构 8、IO流 9...

    用户1220053
  • 【趣学程序】Java中的异常

    趣学程序-shaofeer
  • 优雅处理你的Java异常

    来源:https://my.oschina.net/c5ms/blog/1827907

    程序猿DD
  • windows 异常处理

    为了程序的健壮性,windows 中提供了异常处理机制,称为结构化异常,异常一般分为硬件异常和软件异常,硬件异常一般是指在执行机器指令时发生的异常,比如试图向一...

    Masimaro
  • 优雅的处理你的Java异常

    本文仅按照业务系统开发角度描述异常的一些处理看法.不涉及java的异常基础知识,可以自行查阅 《Java核心技术 卷I》 和 《java编程思想》 可以得到更多...

    用户5397975
  • 为什么不建议在 for 循环里捕捉异常?

    在回答标题这个问题之前,我们先试想一下,在没有 try…catch 的情况下,如果想要对函数的异常结果进行判断,我们应该怎么做?

    出其东门
  • 不同的语言,相同的信息:17种语言研究揭示如何以相似的速度交流

    如果准备去另一个国家旅行,最令人头大的肯定是语言不通的问题,有时甚至还会抱怨语言的分类过于细化。

    大数据文摘
  • Java异常面试问题

    异常是在程序执行期间可能发生的错误事件,并且会中断它的正常流程。异常可能来自不同类型的情况,例如用户输入的错误数据,硬件故障,网络连接故障等。

    用户1257393

扫码关注云+社区

领取腾讯云代金券