- 為何編輯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檔案
- package: 是一個管理(分類)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;
- Improved Type Inference for Generic Instance Creation:
- JDK 1.8新增的主要Feature有哪些?
- 支援Lambda Expressions: 可以functionality作為method argument
- Interface支援 default methods
- 支援Method parameter的reflection
參考資料
- Java Code Review Checklist: [1] [2]
- Javadoc Tutorial (Java文件自動產生工具)
- Java中文教學網頁
- Java認證列表