国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

菜鳥初學(xué)Java的備忘錄之Applet

2019-11-18 11:48:55
字體:
供稿:網(wǎng)友

  java的入門比我想象中的還要簡(jiǎn)單的多,目前為止我已經(jīng)對(duì)Java的基本語法結(jié)構(gòu)有所了解。但我知道,深入的研究任何一門語言,都需要時(shí)間和實(shí)踐的積累.
  
  Applet是Java編寫的可以在瀏覽器端運(yùn)行的代碼,它與應(yīng)用程序的明顯區(qū)別在于其執(zhí)行方式的不同,應(yīng)用程序如C程序是從main()主程序開始運(yùn)行的,而Applet則比較復(fù)雜.具體如何復(fù)雜我不太清楚,但我會(huì)慢慢清楚的。關(guān)于Applet的一個(gè)重要性質(zhì)是,我可以將Html中的值作為參數(shù)傳遞給Applet(通過getParameter()來獲取參數(shù)值).這樣,為了產(chǎn)生不同的效果,我們不需要重新編譯Java程序,而只需修改HTML的參數(shù)值即可。由于HTML的代碼也可以動(dòng)態(tài)生成的,因此我可以對(duì)網(wǎng)頁的動(dòng)態(tài)效果進(jìn)行隨心所欲的控制.
  
  在Applet的生命周期中有3個(gè)比較主要的方法:init,start,stop。
  
  init():負(fù)責(zé)Applet的初始化,在整個(gè)Applet的生命周期中,只執(zhí)行一次該方法.和Delphi中的OnCreate()事件是一樣的道理
  
  start():系統(tǒng)在調(diào)用完init()后,將自動(dòng)調(diào)用start(),并且每次當(dāng)前窗口被重新激活時(shí),都會(huì)調(diào)用該方法,和Delphi中的OnShow()事件是差不多的。
  
  stop():用戶離開Applet所在頁面后調(diào)用該方法。它使你在用戶不注重Applet的時(shí)候,停止一些資源的工作以免影響系統(tǒng)運(yùn)行效率.并且我們不需要人為地去掉該方法.該方法同Delphi中的OnClose()事件差不多。
  
  下面是一個(gè)Applet版的HelloWorld
  
  文件名:HelloWorld.java
  
  import java.applet.Applet;
  import java.awt.Graphics;
  
  public class HelloWorld extends Applet
  {
  String title;
  public void init(){
  title="Hello World";
  }
  
  public void paint(Graphics g)
  {
  g.drawString(title,50,20);
  }
  
  }
  
  我們可以看到,程序中是沒有主函數(shù)的,那它如何運(yùn)行呢.既然Applet是在瀏覽器環(huán)境下運(yùn)行的,那我們就需要在HTML文件中來調(diào)用它.需要使用的相關(guān)標(biāo)簽就是<Applet>標(biāo)簽,我們首先建立HTML文件test.htm,源代碼如下:
  
  <html>
  <body>
  Here comes my first applet:
  <br>
  <applet code=HelloWorld.class width=650 height=500>
  </applet>
  </APPLET>
  </body>
  </html>
  
  將該文件和HelloWorld.java放在同一個(gè)目錄中,然后編譯HelloWorld.java之后,直接點(diǎn)擊test.htm打開,就可以看到Applet程序被啟動(dòng)了.或者使用AppletViewer命令A(yù)ppletViewer test.htm也可以不需要瀏覽器直接運(yùn)行該Applet。
  
  下面一個(gè)程序可以更好的幫助我們理解Java Applet在整個(gè)生命周期是如何調(diào)用上面我們介紹的幾個(gè)方法的。
  
  文件名:StartStop.java
  
  import java.awt.*;
  import java.applet.*;
  
  public class StartStop extends Applet
  {
  StringBuffer message;
  public void init()
  {
  message=new StringBuffer("Init done...");
  }
  
  public void start()
  {
  message.append("Started...");
  }
  
  public void stop()
  {
  message.append("Stopped...");
  }
  
  public void paint(Graphics g)
  {
  g.drawString(message.toString(),150,50);
  }
  
  }
  
  運(yùn)行方法同上.(該程序可參考機(jī)械工業(yè)的<Java 簡(jiǎn)明教程>)
  
  同C語言不一樣,使用Java實(shí)現(xiàn)GUI要輕松的多。由于是純面向?qū)ο蟮恼Z言,Java的AWT提供了各種界面元素供我們調(diào)用,如同Delphi里面的組件一樣。下面是Java中的GUI對(duì)象和Delphi中的相應(yīng)組件的對(duì)照表。
  
  Java     Delphi
  
  Button    TButton
  Canvas    TCanvas
  Checkbox   TCheckbox
  CheckboxGroup TRadioGroup
  Choice    TComboBox
  Label     TLabel
  TextField   TEdit
  TextArea   TMemo
  
  然而,JDK并不是可視化的RAD(rapid application development)開發(fā)工具,對(duì)于對(duì)象的使用不能如Delphi那樣只需要拖拉,移位就可以,而需要我們寫調(diào)用代碼.這就產(chǎn)生了一個(gè)麻煩,我怎么樣才能夠讓元素按我的要求在界面中擺放呢?在元素不多時(shí)可以讓Java自動(dòng)布局(Layout),但是元素很多時(shí),或者需要根據(jù)應(yīng)用程序的要求來擺放元素時(shí),就需要使用面板了(Panel).面板在Delphi里也有相應(yīng)的組件(TPanel),但主要是用來對(duì)界面分割,進(jìn)行粗略的布局的,精確的定位還需要開發(fā)人員手動(dòng)調(diào)節(jié).而Java則只能用Panel來定位,不能不說是個(gè)缺陷.也許是我還沒學(xué)到吧。
  
  入門之后,就該深入到對(duì)象的概念了。
  
  假設(shè)在Java中創(chuàng)建了一個(gè)叫做Date的自定義數(shù)據(jù)類型如下
  public class Date{
  int day;
  int month;
  int year;
  }
  
  那么對(duì)于以下三條聲名變量的語句,java在為其分配內(nèi)存的時(shí)候有什么不同嗎?
  (1) int i;
  (2) Date mybirth;
  (3) Date mybirth=new Date();
  
  很顯然是有的,分配情況如下:
  
  (1)Java自動(dòng)為整數(shù)i分配整形變量的內(nèi)存,一般是兩個(gè)字節(jié)
  
  (2)Java聲明了一個(gè)Date類的實(shí)例變量mybirth,并為其分配了存儲(chǔ)空間,但這個(gè)存儲(chǔ)空間里面存儲(chǔ)的只是一個(gè)引用,或者說是一個(gè)地址,目前的地址里面什么都沒有,那么我們就還不能使用這個(gè)實(shí)例變量,不能引用它的成員。
  
  (3)Java創(chuàng)建了一個(gè)Date類的實(shí)例變量mybirth,并為其成員變量分配了足夠的存儲(chǔ)空間,最后返回對(duì)這個(gè)存儲(chǔ)空間的一個(gè)引用,也就是返回這個(gè)存儲(chǔ)空間的首地址,以后就通過mybirth,即這個(gè)首地址來訪問這個(gè)實(shí)例變量里面的各個(gè)成員,如mybirth.day,mybirth.month,mybirth.year。
  
  當(dāng)我們聲明一個(gè)基本數(shù)據(jù)類型的變量(如boolean, byte, short, char, int,long,flat,double)時(shí),系統(tǒng)會(huì)自動(dòng)為變量分配內(nèi)存。但是假如聲明了String或者用戶自定義的變量時(shí),系統(tǒng)不會(huì)立即為其分配內(nèi)存.為什么會(huì)這樣呢?
  
  這是因?yàn)椋琒tring和用戶自定義的變量都屬于類的范疇.一個(gè)被聲明為類的變量,已經(jīng)不再是一個(gè)數(shù)據(jù)了,而變成對(duì)數(shù)據(jù)的一個(gè)引用,就是說mybirth可以看作是一個(gè)指向類的一個(gè)實(shí)例的指針,里面存放的是地址.這樣的話就好理解了。
  
  深入一點(diǎn),既然類的實(shí)例變量值是指針,這個(gè)指針指向一個(gè)類的實(shí)例,那么我們顯然可以定義多個(gè)名稱不同的類的實(shí)例變量,而將它們?nèi)贾赶蛞粋€(gè)實(shí)例。比如:
  
  University u=new University();//定義了一個(gè)類University的實(shí)例變量u,并為其分配對(duì)象的存儲(chǔ)空間
  
  University u2=u;//又定義了一個(gè)實(shí)例變量u2,將u的值賦給u2
  
  那么顯然u2和u除了名稱不同外,其實(shí)是一回事,因?yàn)樗鼈冎赶蛳嗤粋€(gè)地址.
  
  我覺得弄清楚這一點(diǎn)還是很重要的。這些數(shù)據(jù)結(jié)構(gòu)的東西,是一個(gè)程序員需要知道的所以然.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚顺市| 库车县| 江山市| 阿巴嘎旗| 和硕县| 体育| 西乌珠穆沁旗| 漳平市| 西峡县| 麦盖提县| 和硕县| 历史| 庆云县| 龙江县| 霍山县| 鲁山县| 濉溪县| 昂仁县| 临沂市| 平塘县| 无极县| 比如县| 长岛县| 酒泉市| 临泽县| 定襄县| 丰城市| 大丰市| 衢州市| 武强县| 湄潭县| 阿拉善右旗| 张家港市| 集安市| 奎屯市| 磐石市| 贡嘎县| 绥德县| 彭山县| 勐海县| 洪湖市|