摘要
通過本章的學習,讀者應了解Java語言的兩種程序:應用程序、小應用程序的基本結構,能夠編譯、運行Java應用程序和小應用程序。
--------------------------------------------------------------------------------
本章目標:
通過本章的學習,讀者應了解Java語言的兩種程序:應用程序、小應用程序的基本結構,能夠編譯、運行Java應用程序和小應用程序。
4.1 Java應用程序(Application)
與前幾章不同,在這一章節裡,我們將先一起動手做一做,體會一下。然後再結合這個實踐的體會,為大家做相應的講解。
前面東一榔頭,西一棒槌閒扯許多與Java相關的知識,想必許多讀者已經感到幾分倦意了,別急,我們現在就一起來編寫一個Java應用程序,然後一起編譯、運行它。
1. 進入MSDOS方式,新建一個學習目錄:
c:window> md c:javastudy
c:window> cd c:javastudy
注重:
因為使用JDK完全是基本命令行的,所以我們今後會經常在“MS-DOS方式”下工作,而Java程序是在Windows下運行的,所以不能直接使用MSDOS,而應在Windows中運行MS-DOS窗口。
2. 編輯Java語言應用程序(Java Application)源程序:
你可以使用任何編輯器書寫Java源程序,在此我建議你使用Windows的寫字板,你可以直接在MS-DOS窗口調用它,而且這樣使用也更方便,不會在存盤時碰到多出個“.txt”的擴展名的麻煩:
c:javastudy> notepad HelloWorld.java
注重:
當你輸入文件名HelloWorld.java時,請一定要按照例子中的樣式輸入,要區分大小寫。至於為什麼?我們會在後面給出解答。
這時,將會自動回到Windows桌面,然後將出現一個形如下圖的對話框,提示你要編輯的文件HelloWorld.java並不存在,是否新建一個:
圖4-1 提示對話框
單擊“是(Y)”按鈕繼續,這時就會出現你十分熟悉的“記事本”程序界面,你輸入下面的程序代碼,然後存盤退出。
源程序:HelloWorld.java
public class HelloWorld
{
public static void main(String args[])
{
System.out.println("Hello World!!");
}
}
3. 首先在任務欄上點擊“MS-DOS方式”任務項,回到剛才打開的那個MS-DOS窗口。程序寫完之後,我們就要編譯它了!輸入命令:
c:javastudy> javac HelloWorld.java
假如一切正常的話,20秒鐘左右,將回到命令提示符“c:javastudy”,沒有任何錯誤提示就表明編譯成功了。編譯成功後,你可以通過DIR命令觀察到,編譯生成了一個名叫HelloWorld.class的文件。這個文件是存放的就是JAVA偽編譯生成的字節碼。
注重:
筆者經常發現有些初學者會碰到一個錯誤:Bad command or file name,這就是沒有設置Java的路徑,請確保c:jdk1.2in在搜索列表中。
4. 編譯完成後,我們就可以執行這個程序了。由於編譯生成的是字節碼,所以並不能直接運行,需要使用Java的解釋器來行。輸入命令:
c:javastudy> java HelloWorld
注重:
注重,在這個命令中應該是HelloWorld,而不是“HelloWorld.class”,更不是“HelloWord.java”,請一定要注重。
這個程序的結果如下圖所示:
圖4-2 HelloWorld程序的輸出
也就是說,做完了以上工作之後,我們會在MS-DOS窗口中得到一行輸出:Hello World!!
這就是這個Java應用程序的輸出結果。它可能並不有趣,但通過這個簡單的例子,我們學會了編譯、運行一個Java應用程序。
現在,我們已經看到了這個程序的運行結果,接下來,我們就一起來看一下這個程序的結構。
1. 粗看程序
我們先粗略地觀察一下這個僅有7行的程序,應該可以發現兩個特點:
1) 使用符號“{”、“}”標記程序段的開始和結束;
2) 使用“;”標記語句結束;
這不是與C/C++語言一樣嗎!
2. 細看程序
接著,我們使用逐層解析法來仔細地閱讀一下這個程序:
1) 我們先看程序的最外層:
public class HelloWorld
{
………
}
很明顯,public class HelloWorld包括了所有的程序段,也就是說這個程序就是public class HelloWorld,我們從字面上來理解一下:
public:公眾、公用的;
class:類;
也就是說,這是一個類,一個公用的類,它的名字叫做“HelloWorld”,這整個程序就是HelloWorld類。
2) 然後看內面一層:
public static void main(String args[])
{
……
}
那麼在這個類裡,有些什麼東西呢?我們看到了,在HelloWorld類中只有一段程序(因為只有一組{},說明只有一段)。這一段就不那麼直觀了,不過大家注重到沒有這一段程序中有一個很重要的“線索”:main(),假如熟悉C/C++語言的都應該知道這是一個C/C++程序的入口函數呀,程序就從這裡開始執行的。
那麼我告訴你,main()對於Java應用程序來說,也是一個十分重要的方法,因為Java解釋器會從main()開始解釋。不過這裡的的main()不叫函數,而叫方法。
3) 最後分析一下最裡層:
System.out.println("Hello World!!");
這最裡面的一層,就是main()方法中程序語句。對,就是它讓屏幕中出現了Hello World!!的。我們一起試著閱讀一下:
system:系統
out:輸出
println:這個單詞倒沒有,但print大家總明白吧,打印!!
明白了,大概就是說往系統的輸出界面(屏幕)上打印東西,什麼東西呢?對,就是括號內的字符“Hello World!!”。明白了嗎?
到這裡,我們應該對這個程序有了更深的了解了,也對Java應用程序的結構也有一些熟悉,不過這僅是皮毛,更具體、具體的內容和困難在以後的章節中等待著您呢!
一些提示:
現在請大家想一想在前面留下的思考,為什麼輸入java HelloWorld來執行這個程序,而不java HelloWorld.class呢?看你是不是有答案。
自測練習
練習一:試著使用以下兩個命令調用Java解釋程序,分別寫出它們的結果:
1) java HelloWorld.java
____________________________________________________
2)java HelloWorld.class
___________________________________________________
練習二:將下面的Java程序Welcome.java輸入電腦;接著編譯、運行一下,然後回答下面所列出來的問題。
1)將編譯、運行這個程序的命令寫出來:
_________________________________
_________________________________
2)請說說,程序運行的結果是什麼?
源程序:Welcome.java
import javax.swing.*;
public class Welcome
{
public static void main(String args[])
{
JOptionPane.showMessageDialog(
null,
“Welcome to World of Java!”,
“Welcome, dear Friend!”,
JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
練習答案
練習一:
1)Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/java
2)Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/java
輸出都一樣,找不到HelloWorld這個類。也就是說,使用Java解釋器進行解釋時,後面的參數應該是類名。
練習二:
1) 命令為:
c:javastudy> notepad Welcome.java
c:javastudy> javac Welcome.java
c:javastudy> java Welcome
2) 這個程序的輸出如下圖所示:
圖4-3 Java應用程序Welcome.java的運行結果
在這個程序的編譯、執行時,你都將花費挺長的時間,由此可以看出Java程序的執行效率的確是要低一些的。
4.2 Java小應用程序(Applet)
在上一小節中,我們已經成功地編輯、編譯、運行了兩個Java應用程序:HelloWorld和Welcome,現在我們一起來編輯、編譯、運行一個Java小應用程序。
1.首先,編輯Java語言小應用程序(Java Applet)源程序:
與編輯Java應用程序相同,我們使用以下命令調用“寫字板”程序來編輯小應用程序的源程序。
c:javastudy> notepad HelloWorldApplet.java
注重:
編寫小應用程序時,還是要注重文件名的大小寫。
在寫字板中,輸入下面的程序代碼,然後存盤退出。
源程序:HelloWorldApplet.java
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorldApplet extends Applet
{
public void paint(Graphics g)
{
g.drawString(“Hello World!”,0,50);
}
}
2.接著我們回到剛才打開的那個MS-DOS窗口。編譯剛才我們編寫的那個小應用程序,輸入命令:
c:javastudy> javac HelloWorldApplet.java
假如一切正常的話,20秒鐘左右,將回到命令提示符“c:javastudy”,沒有任何錯誤提示就表明編譯成功了。編譯成功後,將生成一個名為HelloWorldApplet.class的文件。
3. 編輯包容Java小應用程序的Html文件,輸入命令:
c:javastudy>notepad HelloWorldApplet.html
一些提示:
使用Java編程,Java源程序文件的名字應與類名一致,但包含小應用程序的HTML文件則無需與其一致。筆者在此取了一樣的名字是為了更易於閱讀。
然後在寫字板中輸入以下內容,存盤退出。
<HTML>
<HEAD>
<TITLE>This is test of Java Applet </TITLE>
</HEAD>
<BODY>
<APPLET CODE=”HelloWorldApplet.class” WIDTH=200 HEIGHT=200>
</APPLET>
</HTML>
一些說明:
由於Java小應用程序是不能直接使用命令行來運行的,它們是嵌入到網頁中的,要使用浏覽器才能夠運行。而浏覽器是無法直接執行Java小應用程序的。這時我們就必須通過HTML文件來告訴浏覽器執行Java小應用程序。
在HTML文件中嵌入Java小應用程序,應使用<APPLET></APPLET>標志,這個標志包含幾個參數:
CODE=“”:用來指出要嵌入的Java小應用程序名稱;
WIDTH=x:用來指定Java小應用程序的寬度;
HEIGHT=x:用來指定Java小應用程序的高度。
4. 運行Java小應用程序HelloWorldApplet。
我們可以通過兩種方法來運行Java小應用程序:一種方法是使用支持Java的浏覽器(如微軟的IE、還用Netscape的Navigator),另一種方法是使用Java的小應用程序浏覽器AppletViewer。下面我們就分別介紹一下。
1) 使用支持Java的浏覽器,在此以IE為例:
打開IE浏覽器,在地址欄上輸入“c:javastudyHelloWorldApplet.html”,將看到這個小應用程序的輸出結果,如下圖所示:
圖4-4 使用IE運行這個Applet
2) 假如使用JDK中的小應用程序浏覽器AppletViewer的話,請輸入以下命令:
c:javastudy> AppletViewer HelloWorldApplet.html
這時,你將看到如下圖所示的輸出:
圖4-5 使用AppletViewer查看Applet
好了,我們又成功地完成了一次Java小應用程序實踐,做了一次編輯、編譯、運行的練習。下面我們一起往返顧一下:
讓我們一起來看一下剛才的那個Java小應用程序的源代碼,了解一下它的結構,以幫助我們更深刻地了解它。
同樣,我們再使用剛才那個方法:逐層解析法,一步步地分析這個程序。
接著,我們使用逐層解析法來仔細地閱讀一下這個程序:
1) 首先我們發現這個程序與上一小節的應用程序相比,最前面多了一段,我們先來看看:
import java.applet.Applet;
import java.awt.Graphics;
這兩句都是以“;”結束的,說明都是一個完整的Java語句。那麼它到底起到什麼作用呢?我們來從字面上理解一下:
import:輸入、進口
也就是說,把java.applet.Applet和java.awt.Graphics輸入/進口到程序中來。熟悉C/C++語言的讀者,看到這裡有什麼聯想沒有!
你想起C/C++中的include語句沒有,C/C++語言中是通過include語句系統提供的頭文件、或自己編寫的頭文件包含到程序中來。
Java語言中的import語句就是C/C++語言的include語句,它用來將Java語言提供的類輸入到程序中來,這樣就可以直接使用輸入的類,大大節省了程序設計的時間。
從字面上理解,我們可以知道:
java.applet.Applet:就是關於小應用程序applet的類;
java.awt.Graphics:則應該是與Graphics(圖形)有關的類!
注重:
講解到這裡,似乎會給大家一個誤解,認為只有在Java小應用程序中會使用import語句,而在Java應用程序中不要使用import語句。千萬不要有這個誤解,否則我就是“誤人子弟”的千古罪人了。
在Java應用程序中也一樣可以使用import語句來擴展程序,而前面的兩個例子,是十分簡單的應用程序,所以沒有用到import語句。而Java小應用程序是一定要使用這個語句的,應為至少需要包括與Applet有關的類。
2) 接著,我們看import語句下面:它是整個程序的最外層:
public class HelloWorldApplet extends Applet
{
………
}
很明顯,public class HelloWorldApplet extends Applet包括了所有的程序段,也就是說這個程序就是public class HelloWorldApplet extends Applet,我們從字面上來理解一下:
public:公眾、公用的;
class:類;
extends:擴展、延伸
也就是說,這是一個類,一個公用的類,它的名字叫做“HelloWorldApplet”,這整個程序就是HelloWorldApplet類。在這個類的名字後面加上了extends Applet,說明這個類是從Applet擴展、延伸出來的,也就是說Applet是“HelloWorldApplet”的父類(超類),而“HelloWorldApplet”則是Applet的子類。
一些提示:
其實這裡指出的Applet類是所有Java小應用程序的超類。
3) 然後我們來看一下這個類裡的內容:
public void paint(Graphics g)
{
……
}
我們發現在這個類中有一個方法:paint,大家一定會感覺到希奇,為什麼沒有main()方法,而卻只有一個paint方法呢!
這是因為,小應用程序不是自己啟動的,而是被已經運行的程序(浏覽器)加載的。浏覽器預定義了每個小應用程序要做的東西。它是通過調用小應用程序具有的方法來實現加載的。這個方法就是paint。
說得更通俗、明白一些,就是說Java應用程序是自己啟動的,從main()方法開始,而小應用程序則是由浏覽器調用的,浏覽器在不同的時候就調用小應用程序中的方法,比如浏覽器要顯示小應用程序就調用小應用程序的paint方法。
4) 最後,就是paint方法所做的事:
g.drawString(“Hello World!”,0,50);
這一行程序就是當paint方法被調用時所執行的語句,我們一起從字面上理解一下:
draw:畫、寫
String:字符串
而g是被定義為Graphics。
大概的意思就是使用Graphics向屏幕書寫字符串。那麼寫什麼呢?寫”Hello World!”,位置呢!對位置(0,50)。
好了,對這個程序的探究就到此為止了。更有更細致的東西,我們就留到後面的章節中逐一地說明吧。下面我們一起來做一些鞏固性的練習吧!
自測練習
與上一小節一樣,我們還是通過實際的練習來鞏固一下。
將下面的Java小應用程序WelcomeApplet.java輸入電腦;接著編譯、運行一下,然後回答下面所列出來的問題。
1)首先請您寫出您是如何完成這個任務的:
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
2)請說說,程序運行的結果是什麼?
源程序:Welcome.java
import java.applet.Applet;
import java.awt.*;
public class WelcomeApplet extends Applet
{
Label textLabel;
public void init()
{
textLabel=new Label (“Welcome to World of Java!”);
textLabel.setAlignment(Label.CENTER);
this.add(textLabel);
}
}
練習答案
1) 首先,啟動寫字板,編輯WelcomeApplet.java:
接著,執行以下命令編譯它:
c:javastudy> javac WelcomeApplet.java
然後編寫一個WelcomeApplet.html文件,其內容如下:
<HTML>
<BODY>
<APPLET CODE=”WelcomeApplet.class” WIDTH=500 HEIGHT=200>
</APPLET>
</HTML>
最後,執行以下命令,啟動小應用程序浏覽器觀察這個小應用程序:
c:javastudy> AppletViewer WelcomeApplet.html
或者打開IE浏覽器,在地址欄上輸入“c:javastudyWelcomeApplet.html”,將看到這個小應用程序的輸出結果。
2)假如使用小應用程序浏覽器將看到以下輸出:
圖4-6 使用小應用程序浏覽器觀看運行結果
假如使用IE,將看到以下輸出:
圖4-7 使用IE觀看運行結果