java语言 百分网手机站

Java编程的常见问题

时间:2020-09-14 10:07:23 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编程的常见问题】相关文章:

Java编程语言10-02

java教程之Java编程基础10-02

Java语言的编程特点10-02

java编程规范介绍11-29

Java编程学习示例11-28

java并发编程参考11-23

Java语言编程简介09-29

java语法基本编程09-25

Java编程语言应用的行业10-02

编程java继承是什么12-06