昆明java培训
达内昆明广州春城路

18487146383

热门课程

java程序里面异常只为异常服务

  • 时间:2016-10-24
  • 发布:昆明Java培训
  • 来源:达内新闻

异常只为异常服务,这是何解?难道异常还能为其它服务不成?昆明Java培训机构的老师告诉你确实能,异常原本是正常逻辑的一个补充,但是有时候会被当做主逻辑使用,看如下代码:

//判断一个枚举是否包含String枚举项

public static <T extends Enum<T>> boolean Contain(Class<T> clz,String name){

boolean result = false;

try{

Enum.valueOf(clz, name);

result = true;

}catch(RuntimeException e){

//只要是抛出异常,则认为不包含

}

return result;

}

判断一个枚举是否包含指定的枚举项,这里会根据valueOf方法是否抛出异常来进行判断,如果抛出异常(一般是IllegalArgumentException异常),则认为是不包含,若不抛出异常则可以认为包含该枚举项,看上去这段代码很正常,但是其中有是哪个错误:

异常判断降低了系统的性能

降低了代码的可读性,只有详细了解valueOf方法的人才能读懂这样的代码,因为valueOf抛出的是一个非受检异常

隐藏了运行期可能产生的错误,catch到异常,但没有做任何处理。

昆明Java培训机构的老师这段代码是用一段异常实现了一个正常的业务逻辑,这导致代码产生了坏味道。要解决从问题也很容易,即不在主逻辑中实使用异常,代码如下:

//判断一个枚举是否包含String枚举项

public static <T extends Enum<T>> boolean Contain(Class<T> clz, String name) {

//遍历枚举项

for (T t : clz.getEnumConstants()) {

//枚举项名称是否相等

if (t.name().equals(name)) {

return true;

}

}

return false;

}

异常只能用在非正常的情况下,不能成为正常情况下的主逻辑,也就是说,异常是是主逻辑的辅助场景,不能喧宾夺主。

而且,异常虽然是描述例外事件的,但能避免则避免之,除非是确实无法避免的异常,例如:

public static void main(String[] args) {

File file = new File("a.txt");

try {

FileInputStream fis = new FileInputStream(file);

//其它业务处理

} catch (FileNotFoundException e) {

e.printStackTrace();

//异常处理

}

}

这样一段代码经常在我们的项目中出现,但经常写并不代表不可优化,这里的异常类FileNotFoundException完全可以在它诞生前就消除掉:先判断文件是否存在,然后再生成FileInputStream对象,这也是项目中常见的代码:

public static void main(String[] args) {

File file = new File("a.txt");

//经常出现的异常,可以先做判断

if (file.exists() && !file.isDirectory()) {

try {

FileInputStream fis = new FileInputStream(file);

//其它业务处理

} catch (FileNotFoundException e) {

e.printStackTrace();

//异常处理

}

}

}

昆明Java培训机构的老师提醒大家注意,虽然增加了if判断语句,增加了代码量,但是却减少了FileNotFoundException异常出现的几率,提高了程序的性能和稳定性。

上一篇:java程序:使用Throwable获得栈信息
下一篇:多使用异常,把性能问题放一边

腾讯游戏Switch独立销量领先——昆明达内

达内java语言编程学以致用

苹果技术:A11芯片上新菜【达内培训】

达内培训之国产手机vivo领跑,小米再上榜

选择城市和中心
贵州省

广西省

海南省