对变量和常量的分析,常量+{$J+}=可定义作用域的全局变量

1、变量和常量从外观上看,变量和常量都是一些符号;
2、从内部看,它们代表某块内存中保存的数据。
3、常量的值是在声明时给定的,程序运行时一般不能改变({$J+}时可以在当前单元中修改),但是变量的值在声明时一般不能给定初始值(Delphi全局变量可在声明时指定初始值),在运行时可以改变;
4、无类型常量与有类型常量
1 Const
2   X = 5;//无类型常量,编译器自动指定;类型为ShortInt,占8字节
3   Y: Integer =5;//有类型常量,占16字节
5、类变量(静态变量)、实例变量、全局变量、局部变量
类变量/常量:delphi不能直接定义;类变量和实例变量的区别是:类变量在内存中只有一个拷贝,运行系统只为类变量分配一次内存,在加载类的过程中完成类变量的内存分配,所以类变量可以直接通过类名访问。对于实例变量,每筹建一个实例对象,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。类变量在所有类的实例中共享,这可以用作实例之间交流的基础或追踪已经创建的实例的数量。

全局变量与局部变量:单元中声名的变量为全局变量,可用于单元内所有方法,单元被引用后也可以被引用单元所使用;方法中声名的变量为局部变量,只能用于方法内部;

在单元中定义的常量,同全局变量,只是不能修改;
在方法中定义的常量,作用域相同都只能在方法中使用,且不可修改(使用{$J+}达到在当前单元中修改常量),除此之外,常量无论在类方法中定义还是在实例方法中定义,其都只保存一个值,并且与实例无关。在不同方法类定义的两个常量可以重名,并不相互影响(DELPHI)
 1 class function TTest.test(t:integer): Integer;
 2 const
 3   i:integer=0;
 4 begin
 5    case t of
 6      0:;
 7      1: i:=1;
 8      2: i:=2;
 9    end;
10 
11    Result:=i;
12 end;
13 
14 procedure TForm1.Button2Click(Sender: TObject);
15 begin
16   showmessage(inttostr(ttest.test(0))) ;
17   showmessage(inttostr(TTest.test(1)));
18   showmessage(inttostr(TTest.test(2)));
19   //tt:=TTest.Create;
20   //showmessage(inttostr(tt.InstanceSize));
21 end;
22 
23 function TTest.test2(t: integer): Integer;
24 const
25   i:integer=0;
26 begin
27    case t of
28      0:;
29      1: i:=1;
30      2: i:=2;
31    end;
32 
33    Result:=i;
34 end;
35 
36 procedure TForm1.Button3Click(Sender: TObject);
37 var
38   t1,t2:TTest;
39 begin
40   t1:=TTest.Create;
41   showmessage(inttostr(t1.test2(0))) ;
42   showmessage(inttostr(t1.test2(1)));
43   showmessage(inttostr(t1.test2(2)));
44   t2:=TTest.Create;
45   showmessage(inttostr(t2.test2(0))) ;
46   showmessage(inttostr(t2.test2(1)));
47   showmessage(inttostr(t2.test2(2)));
48   freeandnil(t1);
49   freeandnil(t2);
50 
51 end;

常量+{$J+}=可定义作用域的全局变量
原文地址:https://www.cnblogs.com/ZhouXiHong/p/318279.html