Java Programming

  • 為何編輯Java程式會有亂碼?
    避免encoding錯亂之問題,編輯器之編碼應選擇UTF-8 without BOM
    BOM (Byte Order Mark): http://en.wikipedia.org/wiki/Byte-order_mark
  • 如何解決遇到中文註解無法正確compile之情況?
    加入參數encoding: javac -encoding utf-8 xxx.java
  • package, import, path與classpath之意義與關係為何?
    • package: 是一個管理(分類)class的機制, 可避免衝突的發生。
      • 包含package名稱的class名稱叫做fully-qualified name
      • Example: ntou.cs.albert
    • import: 告知編譯器要使用的類別是位於哪一個package之下,如此使用者可以只使用class名稱,而不需要fully-qualified name
      • Example: import java.util.Random; 或 import java.util.*;
    • path: 實體作業系統依path中的路徑資訊來尋找可執行指令
      • 對java而言,主要是javac.exe和java.exe,因此需要修改path環境參數,加上C:\Program Files\Java\jdk1.7.x\bin (看你實際安裝的版本)
    • classpath: Compiler與JVM會依classpath中的路徑資訊來尋找可執行之class檔案
  • 何時會進行Garbage Collection?
    Garbage Collection的時機我們並無法得知,可能是記憶體資源不足的時候,或是在程式空閒的時候,可以建議執行環境進行垃圾收集,但也僅止於建議,如果程式當時有優先權更高的執行緒(Thread)正在進行,則垃圾收集並不一定會馬上進行。可以使用System.gc()建議程式進行垃圾收集,如果建議被採納,則物件資源會被回收,回收前會執行finalize()方法。
  • Vector與ArrayList之差異為何?
    Vector是thread-safe,ArrayList不是。因此大部分非multi-thread用ArrayList可以省去synchronization之成本。
    空間不夠時,Vector一次增加雙倍空間,ArrayList增加50%。但Vector能自己設定一次增加多少空間。
  • 如何將ArrayList轉換成Array?
    舉例而言,若有一個名稱為result、型態為SearchResult的ArrayList,要將之轉為名稱為resultAry之Array,可用底下寫法: SearchResult[] resultAry = result.toArray(new SearchResult[result.size()]);
  • [Swing]如何自訂元件的Layout方式(如位置與大小)?
    可參考Java Tutorial,先呼叫setLayout(null),再add元件進來。要記得自己set size和location,可用setBounds方法一次做到。
  • [Swing]如何建立半透明之ICON?
    可參考Java Tutorial,其中的「AlphaComposite.getInstance(getRule(rule), alpha)」的alpha就是透明度的設定。
  • [IO]為何讀取中文檔案會顯示亂碼?
    讀檔不能直接用FileReader類別,FileReader會用OS預設的編碼,而導致亞洲文字無法支援。 因此要改用InputStreamReader類別進行讀檔。可參考stackflow之討論串
  • 什麼是Java Bean?為何要使用Java Bean?
    Java Bean是Java的標準元件架構,透過Reflection之類的API可參考http://iamready.myweb.hinet.net/jsp/JavaBean.htm。
  • 如何偵測Java之資源使用情況與效能?
    可使用效能偵測工具:Visual VM

JDK 1.5~1.8新增特性

  • JDK 1.5新增的主要Feature有哪些?
    • Enhanced For
    • Generics
    • Enumeration
    • Ellipsis
    • Assertions
    • Override annotation: 可明確指定overriding之method,避免typo造成之邏輯錯誤
  • JDK 1.6新增的主要Feature有哪些?
    • Desktop: 使用系統預設瀏覽器、e-mail等
    • System Tray (桌面右下角小工具)
    • Http Server API
    • Pluggable Annotation Processing API
    • Support JavaScript
  • JDK 1.7新增的主要Feature有哪些?
    • Improved Type Inference for Generic Instance Creation:
      Map<string, list<string=””>> anagrams = new HashMap<>();
    • Strings in switch
    • Automatic Resource Management: 讀寫檔不需exception handling
    • Underscores in numeric literals:
      int one_million = 1_000_000;
    • Binary literals:
      int binary = 0b1001_1001;
  • JDK 1.8新增的主要Feature有哪些?
    • 支援Lambda Expressions: 可以functionality作為method argument
    • Interface支援 default methods
    • 支援Method parameter的reflection

參考資料