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

JAVA基礎之Applet

編輯:關於JAVA

Applet(小應用程序采用Java創建的基於Html的程序。浏覽器將其暫時下載到用戶的硬盤上,並在Web頁打開時在本地運行。一般的Applet只能通過appletvIEwer或者浏覽器來運行,一般的Java程序通過繼承Applet類也可以嵌入網頁運行。

Java的入門比我想象中的還要簡單的多,目前為止我已經對Java的基本語法結構有所了解。但我知道,深入的研究任何一門語言,都需要時間和實踐的積累.

Applet是Java編寫的可以在浏覽器端運行的代碼,它與應用程序的明顯區別在於其執行方式的不同,應用程序如C程序是從main()主程序開始運行的,而Applet則比較復雜.具體如何復雜我不太清楚,但我會慢慢清楚的。關於Applet的一個重要性質是,我可以將Html中的值作為參數傳遞給Applet(通過getParameter()來獲取參數值).這樣,為了產生不同的效果,我們不需要重新編譯Java程序,而只需修改HTML的參數值即可。由於Html的代碼也可以動態生成的,因此我可以對網頁的動態效果進行隨心所欲的控制.

在Applet的生命周期中有3個比較主要的方法:init,start,stop。

  • init():負責Applet的初始化,在整個Applet的生命周期中,只執行一次該方法.和Delphi中的OnCreate()事件是一樣的道理
  • start():系統在調用完init()後,將自動調用start(),並且每次當前窗口被重新激活時,都會調用該方法,和Delphi中的OnShow()事件是差不多的。
  • stop():用戶離開Applet所在頁面後調用該方法。它使你在用戶不注意Applet的時候,停止一些資源的工作以免影響系統運行效率.並且我們不需要人為地去掉該方法.該方法同Delphi中的OnClose()事件差不多。

下面是一個Applet版的HelloWorld

文件名:HelloWorld.Java

  1. import Java.applet.Applet;
  2. import Java.awt.Graphics;
  3. public class HelloWorld extends Applet
  4. {
  5. String title;
  6. public void init(){
  7. title="Hello World";
  8. }
  9. public void paint(Graphics g)
  10. {
  11. g.drawString(title,50,20);
  12. }
  13. }

我們可以看到,程序中是沒有主函數的,那它如何運行呢.既然Applet是在浏覽器環境下運行的,那我們就需要在HTML文件中來調用它.需要使用的相關標簽就是<Applet>標簽,我們首先建立Html文件test.htm,源代碼如下:

  1. <Html>
  2. <body>
  3. Here comes my first applet:
  4. <br>
  5. <applet code=HelloWorld.class width=650 height=500>
  6. </applet>
  7. </APPLET>
  8. </body>
  9. </Html>

將該文件和HelloWorld.java放在同一個目錄中,然後編譯HelloWorld.Java之後,直接點擊test.htm打開,就可以看到Applet程序被啟動了.或者使用AppletViewer命令AppletVIEwer test.htm也可以不需要浏覽器直接運行該Applet。

下面一個程序可以更好的幫助我們理解Java Applet在整個生命周期是如何調用上面我們介紹的幾個方法的。

文件名:StartStop.Java

  1. import Java.awt.*;
  2. import Java.applet.*;
  3. public class StartStop extends Applet
  4. {
  5. StringBuffer message;
  6. public void init()
  7. {
  8. message=new StringBuffer("Init done...");
  9. }
  10. public void start()
  11. {
  12. message.append("Started...");
  13. }
  14. public void stop()
  15. {
  16. message.append("Stopped...");
  17. }
  18. public void paint(Graphics g)
  19. {
  20. g.drawString(message.toString(),150,50);
  21. }
  22. }

運行方法同上.(該程序可參考機械工業的<Java 簡明教程>)

同C語言不一樣,使用Java實現GUI要輕松的多。由於是純面向對象的語言,Java的AWT提供了各種界面元素供我們調用,如同Delphi裡面的組件一樣。下面是Java中的GUI對象和Delphi中的相應組件的對照表。

對照表

然而,JDK並不是可視化的RAD(rapid application development)開發工具,對於對象的使用不能如Delphi那樣只需要拖拉,移位就可以,而需要我們寫調用代碼.這就產生了一個麻煩,我怎麼樣才能夠讓元素按我的要求在界面中擺放呢?在元素不多時可以讓Java自動布局(Layout),但是元素很多時,或者需要根據應用程序的要求來擺放元素時,就需要使用面板了(Panel).面板在Delphi裡也有相應的組件(TPanel),但主要是用來對界面分割,進行粗略的布局的,精確的定位還需要開發人員手動調節.而Java則只能用Panel來定位,不能不說是個缺陷.也許是我還沒學到吧。

入門之後,就該深入到對象的概念了。

假設在Java中創建了一個叫做Date的自定義數據類型如下

  1. public class Date{
  2. int day;
  3. int month;
  4. int year;
  5. }

那麼對於以下三條聲名變量的語句,Java在為其分配內存的時候有什麼不同嗎?

  1. int i;
  2. Date mybirth;
  3. Date mybirth=new Date();

很顯然是有的,分配情況如下:

(1)Java自動為整數i分配整形變量的內存,一般是兩個字節

(2)Java聲明了一個Date類的實例變量mybirth,並為其分配了存儲空間,但這個存儲空間裡面存儲的只是一個引用,或者說是一個地址,目前的地址裡面什麼都沒有,那麼我們就還不能使用這個實例變量,不能引用它的成員。

(3)Java創建了一個Date類的實例變量mybirth,並為其成員變量分配了足夠的存儲空間,最後返回對這個存儲空間的一個引用,也就是返回這個存儲空間的首地址,以後就通過mybirth,即這個首地址來訪問這個實例變量裡面的各個成員,如mybirth.day,mybirth.month,mybirth.year。

當我們聲明一個基本數據類型的變量(如boolean, byte, short, char, int,long,flat,double)時,系統會自動為變量分配內存。但是如果聲明了String或者用戶自定義的變量時,系統不會立即為其分配內存.為什麼會這樣呢?

這是因為,String和用戶自定義的變量都屬於類的范疇.一個被聲明為類的變量,已經不再是一個數據了,而變成對數據的一個引用,就是說mybirth可以看作是一個指向類的一個實例的指針,裡面存放的是地址.這樣的話就好理解了。

深入一點,既然類的實例變量值是指針,這個指針指向一個類的實例,那麼我們顯然可以定義多個名稱不同的類的實例變量,而將它們全都指向一個實例。比如:

  1. University u=new University();//定義了一個類University的實例變量u,並為其分配對象的存儲空間
  2. University u2=u;//又定義了一個實例變量u2,將u的值賦給u2

那麼顯然u2和u除了名稱不同外,其實是一回事,因為它們指向相同一個地址.

我覺得弄清楚這一點還是很重要的。這些數據結構的東西,是一個程序員需要知道的所以然.

到這,本文就為大家介紹完了,希望對你有幫助。

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