JAVA基础之Applet
创始人
2024-08-02 12:40:40
0

 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. }  

 

我们可以看到,程序中是没有主函数的,那它如何运行呢.既然Applet是在浏览器环境下运行的,那我们就需要在HTML文件中来调用它.需要使用的相关标签就是标签,我们首先建立HTML文件test.htm,源代码如下:

 

  1.  
  2.  
  3. Here comes my first applet:  

  4.  
  5.  
 

  •  
  •  
  •  
  •  

    将该文件和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. }  

     

    运行方法同上.(该程序可参考机械工业的)

    同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;  

     

    那么对于以下三条声名变量的语句,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. Java 多线程同步问题的探究(一)
    2. Java 多线程同步问题的探究(二)
    3. 比较:JAVA解析XML的四种方法
    4. 详细介绍JAVA和C++区别
    5. 谈JAVA静态载入的两种方式

    相关内容

    热门资讯

    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
    Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
    20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
    德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
    着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
    为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...