java类中允许静态方法和静态变量,
我知道在delphi中用class关键字表示静态的方法,
但是在delphi中怎么表示和使用静态的变量?
静态方法可以设为虚方法吗?
还有就是面向对象编程里面为什么一定要有静态变量和静态方法这样一种特性?
谢了,分不够可以再加,以上三个问题每个100分。

解决方案 »

  1.   

    在delphi中怎么表示和使用静态的变量?
    答:在Delphi5中直接用const来定义静态局部变量,在Delphi6中则可以使用const和{$J+}开关来办到。但是这样的静态变量如果定义在类方法中,那么这个类所创建的对象里的静态变量都是共享的。我写了一个简单的例程如下:在Delphi里New->Application,再New->Unit,贴入MyObj类的代码如下:
    unit Unit2;interfacetype
      TMyObj = class
      public
        procedure ShowID;
      end;implementationuses Dialogs, SysUtils;procedure TMyObj.ShowID;
    {$J+}
    const
      I: Integer = 0;
    {$J-}
    begin
      ShowMessage(IntToStr(I));
      Inc(I);
    end;end.
    然后回到Unit1,在Interface段添加对Unit2的引用,在Form1上放2个Button。
    为Form1的OnCreate、OnClose事件以及两个Button的OnClick事件添写处理代码,最终使Unit1的代码变成如下:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Unit2;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        OBJ1, OBJ2: TMyObj;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
    begin
      OBJ1 := TMyObj.Create;
      OBJ2 := TMyObj.Create;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      OBJ1.ShowID;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      OBJ2.ShowID;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      OBJ1.Free;
      OBJ2.Free;
    end;end.
      

  2.   

    现在按F9运行程序,点击Button1->显示数字0->点击Button1->显示数字1->点击Button2->显示数字2,这表示OBJ1和OBJ2的静态局部变量I在整个类中是共享的。2。静态方法和虚方法(或者动态方法)的区别就是是编译时绑定还是运行时绑定. 通常Delphi避免称呼静态方法, 而以方法来称呼他们.
      

  3.   

    Delphi的virtual或dynamic说明符不能用于class方法
    所以静态方法不可以是虚方法
    这和C#一样
    但和Java不同,Java确实可以.
      

  4.   

    静态方法么,你想,要是没有,那么一定得创建一个Math对象,才能用Math.sin()方法,这与现实不相符啊.有一些对象,现实中是绝无仅有的,不需创建,也无法销毁.TEarth只能用来表示地球的一些特性和动作,不能再创建一个地球.它的方法,只能是静态方法.
      

  5.   

    ok,谢谢各位,继续讨论,
    讨论得越清楚越好,呵呵。
    哪位能不能再说说静态变量?不是c++的静态变量,
    是java的类中的静态成员,在dephi的类中怎么实现?
      

  6.   

    静态成员只能用CLASS来声明了
      

  7.   

    WGYKING(【修罗】我爱北极熊
    你说用class声明,怎么声明啊?能具体一点吗?3x
      

  8.   

    >>java类中允许静态方法和静态变量,
    >>我知道在delphi中用class关键字表示静态的方法,
    >>但是在delphi中怎么表示和使用静态的变量?
    在delphi没有等同于c++中的静态变量。(java我不懂)>>静态方法可以设为虚方法吗?可以。事实上你看TObject的类方法(静态方法)都是虚拟的。>>还有就是面向对象编程里面为什么一定要有静态变量和静态方法这样一种特性?
    >>谢了,分不够可以再加,以上三个问题每个100分。
    因为有些操作只是和类有关的,和个别的对象没有什么关系。还有一种考虑,就是效率的原因。