
Java Tutorial 第一堂(4)套件、I/O 與例外
Java Tutorial 第一堂(3)哈囉!世界! << 前情 接著我們要來看看,第一個 HelloWorld.java 到底寫了什麼,為了方便,將程式碼在這邊再貼一次: import java.nio.charset.Charset; import java.io.IOException; import java.nio.file.*; import static java.lang.System.*; public class HelloWorld { public static void main(String[] args) { Path source = Paths.get(args[0]); Charset charset = Charset.forName("UTF-8"); try { for(String line : Files.readAllLines(source, charset)) { out.println(line); } } catch(IOException ex) { err.println(ex.getMessage()); } } } 這個程式碼就包括了 Java 中套件管理、輸入輸出(Input / Output)、字元編碼與例外處理等的特色,與其只給你一個簡單的 Hello! World! 程式,不如一開始就來面對它們。 套件管理程式開發中會使用到程式庫,程式庫中會包括許多類別,為了避免彼此名稱衝突,也為了避免檔案彼此覆蓋,Java 提到了套件(Package)來加以管理,之後還會介紹套件的 如果有很多個類別都擁有相同的套件名稱,逐一使用 在 Java 中可使用套件組織類別之外,對於一些語言中有的函式(Function),Java 可使用靜態( 因此你也可以看出, 有時類別名稱寫出來會讓程式比較清楚,但有時對程式可讀性沒有幫助時反而顯得太過麻煩,此時可以使用像是 輸入輸出Java 的程式進入點是 在 Java 中進行輸入輸出可以基於串流(Stream)程式庫,或是基於高階的 New IO 程式庫,
迴圈中的 例外程式中的錯誤總是無所不在,Java 中對於錯誤的表示,不以某個常數來表示,這也是為何程式進入點宣告為 try { for(String line : Files.readAllLines(source, charset)) { out.println(line); } } 如果 catch(IOException ex) { err.println(ex.getMessage()); } 如果真的發生錯誤了,就可取得訊息並透過標準錯誤輸出來顯示。只是,我們怎麼知道在這邊要捕捉 這麼做的好處之一是,只要查詢文件,不用看原始碼,也可以知道這個方法會拋出什麼例外,實際上,如果你忘了要處理例外,像是 … import java.nio.charset.Charset; import java.nio.file.*; public class HelloWorld { public static void main(String[] args) { Path source = Paths.get(args[0]); Charset charset = Charset.forName("UTF-8"); for(String line : Files.readAllLines(source, charset)) { System.out.println(line); } } } 忘了要處理宣告的 /home/codedata/Hello/src/main/java/HelloWorld.java:8: error: unreported exception IOException; must be caught or declared to be thrown for(String line : Files.readAllLines(source, charset)) { ^ 1 error 很貼心地設計嗎?實際上,Java 是唯一採用這種作法的語言,然而這也是 Java 最常被攻訐的缺點之一,因為這必須造成語法上的繁瑣,在應用程式演化至一定規模時,也會遭遇到設計上的麻煩,有時你就是不想或無法在現階段處理例外,也得明確地採用某個處理方式,像是使用這邊的 無論如何,Java 一直堅持著這樣的例外處理風格,這就成了 Java 的特色了(Java 是門囉囉嗦嗦的語言,只是它有它囉嗦的道理),與其抗拒它,不如正確地認識如何使用它,這會是日後你繼續深入 Java 時必修的課題。 第一堂課的內容就到這邊了,我們認識了 Java 環境的安裝與準備,寫了第一個 Java 程式,瞭解了一些套件管理、輸入輸出以及例外處理等 Java 中特有的特性,休息一下!後面要來進入第二堂課,瞭解更多 Java 語言的細節。 |