初学Java的备忘录之Applet

出处: docsky
下面一个程序可以更好的帮助我们理解Java Applet在整个生命周期是如何调用上面我们介绍的几个方法的。

  文件名: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);
  }

}

  运行方法同上.(该程序可参考机械工业的<Java 简明教程>)

  同C语言不一样,使用Java实现GUI要轻松的多。由于是纯面向对象的语言,Java的AWT提供了各种界面元素供我们调用,如同Delphi里面的组件一样。下面是Java中的GUI对象和Delphi中的相应组件的对照表。

Java          Delphi
  
Button        TButton
Canvas        TCanvas
Checkbox      TCheckbox
CheckboxGroup TRadioGroup
Choice        TComboBox
Label         TLabel
TextField     TEdit
TextArea      TMemo

  然而,JDK并不是可视化的RAD(rapid application development)开发工具,对于对象的使用不能如Delphi那样只需要拖拉,移位就可以,而需要我们写调用代码.这就产生了一个麻烦,我怎么样才能够让元素按我的要求在界面中摆放呢?在元素不多时可以让Java自动布局(Layout),但是元素很多时,或者需要根据应用程序的要求来摆放元素时,就需要使用面板了(Panel).面板在Delphi里也有相应的组件(TPanel),但主要是用来对界面分割,进行粗略的布局的,精确的定位还需要开发人员手动调节.而Java则只能用Panel来定位,不能不说是个缺陷.也许是我还没学到吧。

  入门之后,就该深入到对象的概念了。

  假设在Java中创建了一个叫做Date的自定义数据类型如下
 
 public class Date{
    int day;
    int month;
    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可以看作是一个指向类的一个实例的指针,里面存放的是地址.这样的话就好理解了。

  深入一点,既然类的实例变量值是指针,这个指针指向一个类的实例,那么我们显然可以定义多个名称不同的类的实例变量,而将它们全都指向一个实例。比如:

   University u=new University();//定义了一个类University的实例变量u,并为其分配对象的存储空间

  University u2=u;//又定义了一个实例变量u2,将u的值赋给u2

  那么显然u2和u除了名称不同外,其实是一回事,因为它们指向相同一个地址.

  我觉得弄清楚这一点还是很重要的。这些数据结构的东西,是一个程序员需要知道的所以然.

下面一个程序可以更好的帮助我们理解Java Applet在整个生命周期是如何调用上面我们介绍的几个方法的。

  文件名: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);
  }

}

  运行方法同上.(该程序可参考机械工业的<Java 简明教程>)

  同C语言不一样,使用Java实现GUI要轻松的多。由于是纯面向对象的语言,Java的AWT提供了各种界面元素供我们调用,如同Delphi里面的组件一样。下面是Java中的GUI对象和Delphi中的相应组件的对照表。

Java          Delphi
  
Button        TButton
Canvas        TCanvas
Checkbox      TCheckbox
CheckboxGroup TRadioGroup
Choice        TComboBox
Label         TLabel
TextField     TEdit
TextArea      TMemo

  然而,JDK并不是可视化的RAD(rapid application development)开发工具,对于对象的使用不能如Delphi那样只需要拖拉,移位就可以,而需要我们写调用代码.这就产生了一个麻烦,我怎么样才能够让元素按我的要求在界面中摆放呢?在元素不多时可以让Java自动布局(Layout),但是元素很多时,或者需要根据应用程序的要求来摆放元素时,就需要使用面板了(Panel).面板在Delphi里也有相应的组件(TPanel),但主要是用来对界面分割,进行粗略的布局的,精确的定位还需要开发人员手动调节.而Java则只能用Panel来定位,不能不说是个缺陷.也许是我还没学到吧。

  入门之后,就该深入到对象的概念了。

  假设在Java中创建了一个叫做Date的自定义数据类型如下
 
 public class Date{
    int day;
    int month;
    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可以看作是一个指向类的一个实例的指针,里面存放的是地址.这样的话就好理解了。

  深入一点,既然类的实例变量值是指针,这个指针指向一个类的实例,那么我们显然可以定义多个名称不同的类的实例变量,而将它们全都指向一个实例。比如:

   University u=new University();//定义了一个类University的实例变量u,并为其分配对象的存储空间

  University u2=u;//又定义了一个实例变量u2,将u的值赋给u2

  那么显然u2和u除了名称不同外,其实是一回事,因为它们指向相同一个地址.

  我觉得弄清楚这一点还是很重要的。这些数据结构的东西,是一个程序员需要知道的所以然.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值