2、从内部看,它们代表某块内存中保存的数据。
3、常量的值是在声明时给定的,程序运行时一般不能改变({$J+}时可以在当前单元中修改),但是变量的值在声明时一般不能给定初始值(Delphi全局变量可在声明时指定初始值),在运行时可以改变;
4、无类型常量与有类型常量
1 Const
2 X = 5;//无类型常量,编译器自动指定;类型为ShortInt,占8字节
3 Y: Integer =5;//有类型常量,占16字节
5、类变量(静态变量)、实例变量、全局变量、局部变量2 X = 5;//无类型常量,编译器自动指定;类型为ShortInt,占8字节
3 Y: Integer =5;//有类型常量,占16字节
类变量/常量: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;
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+}=可定义作用域的全局变量