熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Reference 不為人知的一面

2013-11-15 09:50:05  來源: JSP教程 

  Java 不支持 pointer只提供 reference初學者常常因此頗為困惑特別是修過數據
  結構的信息系學生他們心中第一個想到的是「沒 pointer這怎麼成那不就做不
  出 linked list 和 tree 的數據結構?」殊不知 reference 就是一種智能型的 point
  er它具有 pointer 的好處而且不用像 pointer 一樣要程序員自行 reference (*)
  以及 dereference (&)更不會像 pointer 一樣會誤闖內存禁區造成 crash因為好
  處多多所以 reference 已經是現代化程序語言的重要必備功能了什麼!你說 xx 高
  級語言沒支持 reference那你可以把它埋葬在二十世紀的歷史灰燼中
  Java 對於資料的處理方式是只要是基本型態(包括 boolean byte short int l
  ong float double char)一律使用 pass by value其它型態一律 pass by refer
  ence但是我發現這在未來有可能變動因為 Java language 將 byvalue 訂為 reser
  ved word(非 keyword)當 Java 將 byvalue 變成 keyword 之時非基本型態的值
  就可以 pass by value 了但我相信此時 Java 也必須開始支持 copy constructor
  作為配套措施畢竟使用 deep copy 或 shallow copy(甚至 deep 和 shallow 兼而
  有之的 copy)還是要讓 programmer 決定
  前面提到只要是基本型態(包括 booleanbyteshortintlongfloatdoubl
  echar)一律使用 pass by value其它型態一律 pass by reference到底什麼是
  pass by value?什麼又是 pass by reference 呢?打個比方pass by value 就是資
  料的「分身」傳遞過去pass by reference 就是資料的「本尊」傳遞過去(注
  從 發生那件新聞有了「本尊」和「分身」的名詞之後我發現要向學生解釋 refere
  nce 的觀念也就容易多了)因為對象一律是 pass by reference所以一個對象常常
  同時被多個 variable 所指到
  Java 提供自動內存管理的機制也就是俗稱的 garbage collection(垃圾收集)
  一個對象不再被任何 variable 所指到就代表此對象從此不可能再被利用Java 虛擬
  機器內一個負責收集垃圾的 thread 就會在適當的時機出來將此塊內存回收
  記得在 Java 之父 James Gosling 應邀到台灣時(月)我曾經問他Java
  的這種自動內存管理方式造成某些程序(例如 debugger)的困擾Java 有沒有打算支
  持 weak reference James Gosling回答未來的版本將會支持 weak reference
  然在後來的 JDK 就提供此支持了JDK 除了 weak reference(也就是 java
  langrefWeakReference)之外還多了一個強化的 weak reference(也就是 javal
  angrefSoftReference)以及一個弱化的 weak reference(也就是 javalangrefP
  hantomReference)這個設計考慮得相當仔細
  這些 reference 依照「強度」排列如下
  Direct Reference > Soft Reference > Weak Reference > Phantom Reference
  其中direct reference 就是一般的 reference只要被任何 direct reference 所
  reference 到的對象就不會被 garbage collector 清除其它的三種 reference(包括
  soft referenceweak referencephantom reference)則不然他們不會影響 gar
  bage collection
  如果你對這些特殊的 reference 感興趣不妨去看看 javalangref 的 Javadoc
  便寫幾個程序試試看
  

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19193.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.