亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

java語(yǔ)言

Java編程的常見問(wèn)題

時(shí)間:2025-05-15 22:57:57 java語(yǔ)言 我要投稿

Java編程的常見問(wèn)題

  每天在寫Java程序,其實(shí)里面有一些細(xì)節(jié)大家可能沒怎么注意,這不,有人總結(jié)了一個(gè)我們編程中常見的問(wèn)題。下面是小編為大家整理的Java編程的常見問(wèn)題,歡迎參考~

  優(yōu)先返回空集合而非null

  如果程序要返回一個(gè)不包含任何值的集合,確保返回的是空集合而不是null。這能節(jié)省大量的"if else"檢查。

  public class getLocationName {

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

  }

  頻繁使用計(jì)時(shí)器

  錯(cuò)誤代碼:

  for (...) {

  long t = System.currentTimeMillis();

  long t = System.nanoTime();

  Date d = new Date();

  Calendar c = new GregorianCalendar();

  }

  每次new一個(gè)Date或Calendar都會(huì)涉及一次本地調(diào)用來(lái)獲取當(dāng)前時(shí)間(盡管這個(gè)本地調(diào)用相對(duì)其他本地方法調(diào)用要快)。

  如果對(duì)時(shí)間不是特別敏感,這里使用了clone方法來(lái)新建一個(gè)Date實(shí)例。這樣相對(duì)直接new要高效一些。

  正確的寫法:

  Date d = new Date();

  for (E entity : entities) {

  entity.doSomething();

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

  }

  如果循環(huán)操作耗時(shí)較長(zhǎng)(超過(guò)幾ms),那么可以采用下面的方法,立即創(chuàng)建一個(gè)Timer,然后定期根據(jù)當(dāng)前時(shí)間更新時(shí)間戳,在我的系統(tǒng)上比直接new一個(gè)時(shí)間對(duì)象快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();

  }

  捕獲所有的異常

  錯(cuò)誤的寫法:

  Query q = ...

  Person p;

  try {

  p = (Person) q.getSingleResult();

  } catch(Exception e) {

  p = null;

  }

  這是EJB3的一個(gè)查詢操作,可能出現(xiàn)異常的原因是:結(jié)果不唯一;沒有結(jié)果;數(shù)據(jù)庫(kù)無(wú)法訪問(wèn),而捕獲所有的異常,設(shè)置為null將掩蓋各種異常情況。

  正確的寫法:

  Query q = ...

  Person p;

  try {

  p = (Person) q.getSingleResult();

  } catch(NoResultException e) {

  p = null;

  }

  忽略所有異常

  錯(cuò)誤的寫法:

  try {

  doStuff();

  } catch(Exception e) {

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

  }

  doMoreStuff();

  這個(gè)代碼有兩個(gè)問(wèn)題, 一個(gè)是沒有告訴調(diào)用者, 系統(tǒng)調(diào)用出錯(cuò)了. 第二個(gè)是日志沒有出錯(cuò)原因, 很難跟蹤定位問(wèn)題。

  正確的寫法:

  try {

  doStuff();

  } catch(Exception e) {

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

  }

  重復(fù)包裝RuntimeException

  錯(cuò)誤的寫法:

  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);

  }

  不正確的傳播異常

  錯(cuò)誤的寫法:

  try {

  } catch(ParseException e) {

  throw new RuntimeException();

  throw new RuntimeException(e.toString());

  throw new RuntimeException(e.getMessage());

  throw new RuntimeException(e);

  }

  主要是沒有正確的將內(nèi)部的錯(cuò)誤信息傳遞給調(diào)用者. 第一個(gè)完全丟掉了內(nèi)部錯(cuò)誤信息, 第二個(gè)錯(cuò)誤信息依賴toString方法, 如果沒有包含最終的嵌套錯(cuò)誤信息, 也會(huì)出現(xiàn)丟失, 而且可讀性差. 第三個(gè)稍微好一些, 第四個(gè)跟第二個(gè)一樣。

  正確的寫法:

  try {

  } catch(ParseException e) {

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

  }

【Java編程的常見問(wèn)題】相關(guān)文章:

Java編程常見問(wèn)題07-19

Java編程常見問(wèn)題匯總06-12

java編程術(shù)語(yǔ)11-10

java編程基礎(chǔ)07-26

Java編程語(yǔ)言10-02

java教程之Java編程基礎(chǔ)09-12

Java編程環(huán)境的搭建06-03

java編程規(guī)范介紹07-10

java語(yǔ)法基本編程10-08