程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 我們的第一個Java程序

我們的第一個Java程序

編輯:關於JAVA

最後,讓我們正式編一個程序(注釋⑤)。它能打印出與當前運行的系統有關的資料,並利用了來自Java標准庫的System對象的多種方法。注意這裡引入了一種額外的注釋樣式:“//”。它表示到本行結束前的所有內容都是注釋:

 

// Property.java
import java.util.*;

public class Property {
  public static void main(String[] args) {
    System.out.println(new Date());
    Properties p = System.getProperties();
    p.list(System.out);
    System.out.println("--- Memory Usage:");
    Runtime rt = Runtime.getRuntime();
    System.out.println("Total Memory = "
                       + rt.totalMemory()
                       + " Free Memory = "
                       + rt.freeMemory());
  }
}


⑤:在某些編程環境裡,程序會在屏幕上一切而過,甚至沒機會看到結果。可將下面這段代碼置於main()的末尾,用它暫停輸出:
try {
Thread.currentThread().sleep(5 * 1000);
} catch(InterruptedException e) {}
}
它的作用是暫停輸出5秒鐘。這段代碼涉及的一些概念要到本書後面才會講到。所以目前不必深究,只知道它是讓程序暫停的一個技巧便可。


在每個程序文件的開頭,都必須放置一個import語句,導入那個文件的代碼裡要用到的所有額外的類。注意我們說它們是“額外”的,因為一個特殊的類庫會自動導入每個Java文件:java.lang。啟動您的Web浏覽器,查看由Sun提供的用戶文檔(如果尚未從http://www.java.sun.com下載,或用其他方式安裝了Java文檔,請立即下載)。在packages.html文件裡,可找到Java配套提供的所有類庫名稱。請選擇其中的java.lang。在“Class Index”下面,可找到屬於那個庫的全部類的列表。由於java.lang默認進入每個Java代碼文件,所以這些類在任何時候都可直接使用。在這個列表裡,可發現System和Runtime,我們在Property.java裡用到了它們。java.lang裡沒有列出Date類,所以必須導入另一個類庫才能使用它。如果不清楚一個特定的類在哪個類庫裡,或者想檢視所有的類,可在Java用戶文檔裡選擇“Class Hierarchy”(類分級結構)。在Web浏覽器中,雖然要花不短的時間來建立這個結構,但可清楚找到與Java配套提供的每一個類。隨後,可用浏覽器的“查找”(Find)功能搜索關鍵字“Date”。經這樣處理後,可發現我們的搜索目標以java.util.Date的形式列出。我們終於知道它位於util庫裡,所以必須導入java.util.*;否則便不能使用Date。
觀察packages.html文檔最開頭的部分(我已將其設為自己的默認起始頁),請選擇java.lang,再選System。這時可看到System類有幾個字段。若選擇out,就可知道它是一個static PrintStream對象。由於它是“靜態”的,所以不需要我們創建任何東西。out對象肯定是3,所以只需直接用它即可。我們能對這個out對象做的事情由它的類型決定:PrintStream。PrintStream在說明文字中以一個超鏈接的形式列出,這一點做得非常方便。所以假若單擊那個鏈接,就可看到能夠為PrintStream調用的所有方法。方法的數量不少,本書後面會詳細介紹。就目前來說,我們感興趣的只有println()。它的意思是“把我給你的東西打印到控制台,並用一個新行結束”。所以在任何Java程序中,一旦要把某些內容打印到控制台,就可條件反射地寫上System.out.println("內容")。
類名與文件是一樣的。若象現在這樣創建一個獨立的程序,文件中的一個類必須與文件同名(如果沒這樣做,編譯器會及時作出反應)。類裡必須包含一個名為main()的方法,形式如下:
public static void main(String[] args) {
其中,關鍵字“public”意味著方法可由外部世界調用(第5章會詳細解釋)。main()的自變量是包含了String對象的一個數組。args不會在本程序中用到,但需要在這個地方列出,因為它們保存了在命令行調用的自變量。
程序的第一行非常有趣:
System.out.println(new Date());
請觀察它的自變量:創建Date對象唯一的目的就是將它的值發送給println()。一旦這個語句執行完畢,Date就不再需要。隨之而來的“垃圾收集器”會發現這一情況,並在任何可能的時候將其回收。事實上,我們沒太大的必要關心“清除”的細節。
第二行調用了System.getProperties()。若用Web浏覽器查看聯機用戶文檔,就可知道getProperties()是System類的一個static方法。由於它是“靜態”的,所以不必創建任何對象便可調用該方法。無論是否存在該類的一個對象,static方法隨時都可使用。調用getProperties()時,它會將系統屬性作為Properties類的一個對象生成(注意Properties是“屬性”的意思)。隨後的的句柄保存在一個名為p的Properties句柄裡。在第三行,大家可看到Properties對象有一個名為list()的方法,它將自己的全部內容都發給一個我們作為自變量傳遞的PrintStream對象。
main()的第四和第六行是典型的打印語句。注意為了打印多個String值,用加號(+)分隔它們即可。然而,也要在這裡注意一些奇怪的事情。在String對象中使用時,加號並不代表真正的“相加”。處理字串時,我們通常不必考慮“+”的任何特殊含義。但是,Java的String類要受一種名為“運算符過載”的機制的制約。也就是說,只有在隨同String對象使用時,加號才會產生與其他任何地方不同的表現。對於字串,它的意思是“連接這兩個字串”。
但事情到此並未結束。請觀察下述語句:
System.out.println("Total Memory = "
+ rt.totalMemory()
+ " Free Memory = "
+ rt.freeMemory());
其中,totalMemory()和freeMemory()返回的是數值,並非String對象。如果將一個數值“加”到一個字串身上,會發生什麼情況呢?同我們一樣,編譯器也會意識到這個問題,並魔術般地調用一個方法,將那個數值(int,float等等)轉換成字串。經這樣處理後,它們當然能利用加號“加”到一起。這種“自動類型轉換”亦劃入“運算符過載”處理的范疇。
許多Java著作都在熱烈地辯論“運算符過載”(C++的一項特性)是否有用。目前就是反對它的一個好例子!然而,這最多只能算編譯器(程序)的問題,而且只是對String對象而言。對於自己編寫的任何源代碼,都不可能使運算符“過載”。
通過為Runtime類調用getRuntime()方法,main()的第五行創建了一個Runtime對象。返回的則是指向一個Runtime對象的句柄。而且,我們不必關心它是一個靜態對象,還是由new命令創建的一個對象。這是由於我們不必為清除工作負責,可以大模大樣地使用對象。正如顯示的那樣,Runtime可告訴我們與內存使用有關的信息。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved