java编程 问题_Java编程的常见问题

Java编程的常见问题

每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题。下面是小编为大家整理的Java编程的常见问题,欢迎参考~

Java编程的常见问题

优先返回空集合而非null

如果程序要返回一个不包含任何值的集合,确保返回的是空集合而不是null。这能节省大量的"if else"检查。

public class getLocationName {

return (null==cityName ? "": cityName);

}

频繁使用计时器

错误代码:

for (...) {

long t = System.currentTimeMillis();

long t = System.nanoTime();

Date d = new Date();

Calendar c = new GregorianCalendar();

}

每次new一个Date或Calendar都会涉及一次本地调用来获取当前时间(尽管这个本地调用相对其他本地方法调用要快)。

如果对时间不是特别敏感,这里使用了clone方法来新建一个Date实例。这样相对直接new要高效一些。

正确的写法:

Date d = new Date();

for (E entity : entities) {

entity.doSomething();

entity.setUpdated((Date) d.clone());

}

如果循环操作耗时较长(超过几ms),那么可以采用下面的方法,立即创建一个Timer,然后定期根据当前时间更新时间戳,在我的系统上比直接new一个时间对象快200倍:

private volatile long time;

Timer timer = new Timer(true);

try {

time = System.currentTimeMillis();

timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

time = System.currentTimeMillis();

}

}, 0L, 10L); // granularity 10ms

for (E entity : entities) {

entity.doSomething();

entity.setUpdated(new Date(time));

}

} finally {

timer.cancel();

}

捕获所有的异常

错误的写法:

Query q = ...

Person p;

try {

p = (Person) q.getSingleResult();

} catch(Exception e) {

p = null;

}

这是EJB3的一个查询操作,可能出现异常的原因是:结果不唯一;没有结果;数据库无法访问,而捕获所有的异常,设置为null将掩盖各种异常情况。

正确的写法:

Query q = ...

Person p;

try {

p = (Person) q.getSingleResult();

} catch(NoResultException e) {

p = null;

}

忽略所有异常

错误的写法:

try {

doStuff();

} catch(Exception e) {

log.fatal("Could not do stuff");

}

doMoreStuff();

这个代码有两个问题, 一个是没有告诉调用者, 系统调用出错了. 第二个是日志没有出错原因, 很难跟踪定位问题。

正确的写法:

try {

doStuff();

} catch(Exception e) {

throw new MyRuntimeException("Could not do stuff because: "+ e.getMessage, e);

}

重复包装RuntimeException

错误的写法:

try {

doStuff();

} catch(Exception e) {

throw new RuntimeException(e);

}

正确的'写法:

try {

doStuff();

} catch(RuntimeException e) {

throw e;

} catch(Exception e) {

throw new RuntimeException(e.getMessage(), e);

}

try {

doStuff();

} catch(IOException e) {

throw new RuntimeException(e.getMessage(), e);

} catch(NamingException e) {

throw new RuntimeException(e.getMessage(), e);

}

不正确的传播异常

错误的写法:

try {

} catch(ParseException e) {

throw new RuntimeException();

throw new RuntimeException(e.toString());

throw new RuntimeException(e.getMessage());

throw new RuntimeException(e);

}

主要是没有正确的将内部的错误信息传递给调用者. 第一个完全丢掉了内部错误信息, 第二个错误信息依赖toString方法, 如果没有包含最终的嵌套错误信息, 也会出现丢失, 而且可读性差. 第三个稍微好一些, 第四个跟第二个一样。

正确的写法:

try {

} catch(ParseException e) {

throw new RuntimeException(e.getMessage(), e);

}

【Java编程的常见问题】相关文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值