Overload,Constructor,Destructor(功课,请看看对吗。测试能力中。)

L3nnon 2010-08-23 10:05:02

unit Unit2;

interface
uses
SysUtils;

type
TCon = class
private
i, j : Integer;
public
function Runtest : string; overload;
function Runtest(Value : string) : string; overload;

end;

implementation

{ TCon }
function TCon.Runtest: string;
begin
i := 1;
while i <= 4 do
begin
j := i;
while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j);
Inc(j);
end;
Inc(i);
end;
end;

function TCon.Runtest(Value: string): string;
begin
Result := Value;
i := 1;
while i <= 3 do
begin
j := i;
while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j);
Inc(j);
end;
Inc(i);
end;
end;
end.



unit Unit1;
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2;

type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ACon : TCon;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ACon := TCon.Create;
Memo1.Lines.Text := Edit1.Text + ACon.Runtest;
ACon.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ACon := TCon.Create;
Memo1.Lines.Text := ACon.Runtest(Edit1.Text);
ACon.Free;
end;

{function & Button3}
function Runtest(Value : string) : string;
var
i, j : Integer;

begin
Result := Value;
i := 1;
while i <= 3 do
begin
j := i;
while j <= (5 + i) do
begin
Result := Result + ' ' + IntToStr(j);
Inc(j, 2);
end;
Inc(i);
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.Text := Runtest(Edit1.Text);
end;
end.


本人已把 Unit1 链接 Unit2,Unit2 里有两个函数,而Unit1 有一个自身函数和三个控件。
1 - 关于Overload的问题:

1.1. 如果这样的情况下在Unit2 用Overload 指令对吗?
1.2. 有什么负面效果?
1.3. 以你的建议,你会怎样以最好的方法使用Overload?

2 - 关于Result:
2.1. Unit2 里的『function TCon.Runtest: string;』和『function TCon.Runtest(Value: string): string;』
的Result,它们有什么分别??
2.2. 每个Function 里是不是都附带着Result(回函值)?
2.3. Result := Value; <--这是什么,它是什么时候才出现?
2.4. while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j); <--这个 Result(回函值)是不是属于 while?

3 - 关于Unit1 的Button3 自身函数:
3.1. 我要怎样在里面加入 Constructor 和 Destructor?『请给例子』
3.2. Create 是属于 Constructor 的值吗?
3.3. Free 是属于 Destructor 的值吗?
3.4. 如果不用 Constructor 和 Destructor 会有什么负面效果出现?
...全文
281 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
L3nnon 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wxieyang 的回复:]

你真应该找一本基础的书去看看啊。
最起码学一门语言,你首先要知道这个语言的规则。
规则这东西没有什么为什么,也没有什么太多的道理。
就好比靠右侧通行一样,规则而已,你总不能问为什么一定要靠右侧通行呢?有些国家还真就是靠左侧通行的。
关键字就是一个语言的规则之一,你要问为什么要使用这个关键字?那你得去问开发语言规则的人去了。
你只需要记住,什么情况下用什么关键字就好了。
[/Quote]

谢谢。。
下次我一定补分给你。。
万分感谢,你的热心 =)
感动感动~~
wxieyang 2010-09-10
  • 打赏
  • 举报
回复
你真应该找一本基础的书去看看啊。
最起码学一门语言,你首先要知道这个语言的规则。
规则这东西没有什么为什么,也没有什么太多的道理。
就好比靠右侧通行一样,规则而已,你总不能问为什么一定要靠右侧通行呢?有些国家还真就是靠左侧通行的。
关键字就是一个语言的规则之一,你要问为什么要使用这个关键字?那你得去问开发语言规则的人去了。
你只需要记住,什么情况下用什么关键字就好了。
wxieyang 2010-09-10
  • 打赏
  • 举报
回复
问题还真多哦。
这要写多少字才能说清楚啊,累哦。

先说说基础的东西吧。
函数到底是什么?
在程序中,我们给函数起名称,写函数的参数和返回值,然后去实现函数体,那么,编译的时候,编译器是怎么处理的呢?
在Delphi中,编译一个单元中的函数,首先获得单元的名称,然后获得函数的名称,然后得到参数列表和返回值,把这些内容融合到一起,作为函数的标识(注意,是编译器自己用来标识一个函数的方式),然后编译函数体,函数体会被编译到一个相对固定的位置,也就是说,每一个函数都有一个入口地址,当你在程序中调用某个函数的时候,实际上就是将程序的流程跳入到这个入口地址中继续执行(在一个线程中,代码只能顺序地一条一条地执行),直到函数结束的时候再跳回到调用函数的地方继续执行。
简单说,函数就是这个样子。

好了,再说说overload。
从上面的描述中可以看到,一个函数在编译的时候,会被加入单元名称作为其标识的一部分,因此,不同单元中如果出现同名函数,不会有冲突,如果某个单元引用了两个单元,其中这两个单元中有同名函数,则在使用的时候,只要通过 单元名称.函数名称 的方式就能正确调用到函数,如果仅仅使用函数名称,则会调用单元引用列表中,最后一个单元定义的那个函数。
不同单元中存在同名函数的问题是这样处理的,那么,同一个单元中出现同名函数如何处理呢?
那就是overload关键字的作用了。
delphi规定,在一个单元中,不允许出现函数名称、参数列表都一样的函数。如果函数名称相同,但参数列表不一样,则是有条件地允许出现,并且用overload关键字来区分。
从开始的描述中知道,编译器不但要通过函数的名称,还要结合着参数列表来生成函数的标识,因此,同名函数不同参数实际上被编译器生成了两个不一样的标识(因为参数列表不一样),因此不会冲突。

好了,通过上面的描述,你的第一个大问题应该没有问题了

下面说说返回值。
其实返回值也很好理解的,你可以把返回值理解成函数的一个参数,类似这样:
function TCon.Runtest: string;
等价于
procedure TCon.Runtest(Self: TCon; var Result: String);
其中self是一个隐含参数,所有的类中的方法都会有这么一个隐含参数,而result就相当于返回值了。
把函数这么等价一下,你的第二个问题,也不是什么问题了,呵呵
至于
function TCon.Runtest(Value: string): string;

function TCon.Runtest: string;
有什么差别,那差别就是
procedure TCon.Runtest(Self: TCon; Value: string; var Result: String);

procedure TCon.Runtest(Self: TCon; var Result: String);
的差别
至于你说的Result属于是否属于where这个问题,在Delphi中,变量必须在函数的begin前声明,所有的变量都是在函数的整个函数体重都有效,不会出现某个变量仅仅在某个语句模块中有效地情况(C++可以在函数中定义变量,其变量的作用域可能属于某个语句模块,例如 for(int i = 0; i < 100; i++){...} 这个i就只在for语句模块中有效,出了for这个模块,i就无效了),因此result在函数体中的任何地方都是有效的。
这是变量作用域的问题,我好像在哪个帖子中回复过这类问题,我找找看

多线程中哪些变量需要同步

就是上面这个帖子中我的回复了,虽然说的是多线程的事情,但是其中也有关于变量作用域的相关说明,这类就不再重复打字了。

再说说Constructor和Destructor,这是在定义类的一个创建函数和释放函数的关键字,仅仅是关键字而已,是delphi自己的规则,你必须遵守这样的规则去定义类,就好比你必须靠右侧开车,红灯停绿灯行一样,规则而已。当然规则下面会隐藏着原因的,被Constructor关键字定义的函数,会被编译器插入一些代码用来完成类的创建,同样被Destructor定义的函数也会被编译器插入一些代码用来完成一个对象实例的释放。
至于Create和Free属于谁?这个根本就是外行提出的问题,Create和Free仅仅是函数名称而已,和 Constructor 和 Destructor这两个关键字没有什么关系,仅仅是默认情况下,我们通常用Create名称来定义一个类的创建函数,用 Destroy 来定义一个类的释放函数,这仅仅是习惯而已
TForm的一个祖先类TCustomForm就通过constructor关键字定义了一个新的创建类的函数CreateNew
至于Destroy (看好了不是Free呵呵),因为TObject中,这个函数是个虚函数,好多基础类都重载了这个函数,因此,如果你自己定义的释放函数的名字不叫Destroy ,那么你的子类在释放自己的时候会比较麻烦,所以大家在定义释放函数的时候,都是重载Destroy 然后在定义,不过,这也仅仅是习惯上这样而已。


好了,基本上解释了你的问题。
L3nnon 2010-09-10
  • 打赏
  • 举报
回复

{function & Button3}
function Runtest(Value : string) : string;
var
i, j : Integer;

begin
Result := Value;
i := 1;
while i <= 3 do
begin
j := i;
while j <= (5 + i) do
begin
Result := Result + ' ' + IntToStr(j);
Inc(j, 2);
end;
Inc(i);
end;
end;


[Quote=引用 15 楼 xiedewei 的回复:]
2.4. while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j); <--这个 Result(回函值)是不是属于 while?
答:Result属于当前函数,其他任何结构没有所谓的回函值。
[/Quote]

[Quote=引用 14 楼 ecjtu5208 的回复:]
2.4. while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j); <--这个 Result(回函值)是不是属于 while?
不是,属于你的function。[/Quote]

那么每个函数都会附带一个 返回值。
为什么上面代码函数会有三个返回值??
可以解释它们功用和怎么得到的吗?
L3nnon 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wxieyang 的回复:]
其实返回值也很好理解的,你可以把返回值理解成函数的一个参数,类似这样:
function TCon.Runtest: string;
等价于
procedure TCon.Runtest(Self: TCon; var Result: String);
其中self是一个隐含参数,所有的类中的方法都会有这么一个隐含参数,而result就相当于返回值了。
把函数这么等价一下,你的第二个问题,也不是什么问题了,呵呵
至于
function TCon.Runtest(Value: string): string;

function TCon.Runtest: string;
有什么差别,那差别就是
procedure TCon.Runtest(Self: TCon; Value: string; var Result: String);

procedure TCon.Runtest(Self: TCon; var Result: String);
的差别
至于你说的Result属于是否属于where这个问题,在Delphi中,变量必须在函数的begin前声明,所有的变量都是在函数的整个函数体重都有效,不会出现某个变量仅仅在某个语句模块中有效地情况(C++可以在函数中定义变量,其变量的作用域可能属于某个语句模块,例如 for(int i = 0; i < 100; i++){...} 这个i就只在for语句模块中有效,出了for这个模块,i就无效了),因此result在函数体中的任何地方都是有效的。
[/Quote]
太深了。。 我的基础还没到达这里。。
其实我正在看基础的书,只是網友们教的太快了 >.<;;
ecjtu5208 2010-09-09
  • 打赏
  • 举报
回复
3 - 关于Unit1 的Button3 自身函数:
3.1. 我要怎样在里面加入 Constructor 和 Destructor?『请给例子』
Constructor和Destructor是构造函数和析构函数
自己编写一个类的时候,需要写Constructor和Destructor
创建类的时候,首先会调用的时候Constructor,
例如你的ACon := TCon.Create;
Create就是Constructor Create(Aowner:TComponent)

3.2. Create 是属于 Constructor 的值吗?
不是,一般来说Constructor一般命名为Create
例如 Constructor Create(Aowner:TComponent)

3.3. Free 是属于 Destructor 的值吗?
Free是Free,Destructor是Destructor
procedure Free;

Description

Use Free to destroy an object. Free automatically calls the destructor if the object reference is not nil. Any object

instantiated at runtime that does not have an Owner should be destroyed by a call to Free, so that can be properly destroyed

and the memory released. Unlike Destroy, Free is successful even if the object is nil, so if the object was never

initialized, Free won't result in an error.

When you call Free for a component, it calls Free for all components that it owns, that is, all components in its component

list. A form owns all the controls and non-visual components that are created on it in design mode. When it is freed, all of

these components are automatically freed as well. Since, by default, all forms are owned by the Application object, when the

application terminates, it frees the Application object, which frees all forms. For all objects that are not components, or

for components created with a nil owner, be sure to call Free after you are finished with the object; otherwise the allocated

memory will not be usable until after the application terminates.


free的时候,如果对象存在那么自动调用destructor,如果不存在,也不会报错。
以上是Delphi help中的详细解说,英文你会的。

3.4. 如果不用 Constructor 和 Destructor 会有什么负面效果出现?
如果不用Constructor相当于你不写ACon := TCon.Create;
你觉得不写这句会怎么样?连对象实例都没有,你根本做不了任何事情了。
如果不用Destructor相当于你不去销毁这个对象实例,它会滞留在内存中。



累死人,我说的不好。还是自己看书,看源码吧。
尴尬。走人,被老大看到我在这里无聊了
xiedewei 2010-09-09
  • 打赏
  • 举报
回复
更正最后一句“子类根据需要选择覆盖或不覆盖”
xiedewei 2010-09-09
  • 打赏
  • 举报
回复
1 - 关于Overload的问题:
1.1. 如果这样的情况下在Unit2 用Overload 指令对吗?
答:对的。
1.2. 有什么负面效果?
答:没有。
1.3. 以你的建议,你会怎样以最好的方法使用Overload?
答:重载方法应该是根据不同的参数做相同的事情,他们之间往往会互相调用。

2 - 关于Result:
2.1. Unit2 里的『function TCon.Runtest: string;』和『function TCon.Runtest(Value: string): string;』
的Result,它们有什么分别??
答:Result变量存储函数返回值,每个函数都有一个Result。也可以用相应的函数名称代替。
2.2. 每个Function 里是不是都附带着Result(回函值)?
答:同上。
2.3. Result := Value; <--这是什么,它是什么时候才出现?
答:这是赋一个返回值,此时函数返回值即为Value。根据需要,函数体内随时都可以出现。
2.4. while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j); <--这个 Result(回函值)是不是属于 while?
答:Result属于当前函数,其他任何结构没有所谓的回函值。
(补充:类似C++的Return(x),在D2009以前的版本中这样写“Result := x; Exit;”,在D2009以后的版本中可以这样写“Exit(x);”)

3 - 关于Unit1 的Button3 自身函数:
3.1. 我要怎样在里面加入 Constructor 和 Destructor?『请给例子』
答:只有类才有构造(Constructor)、析构(Destructor)函数。
3.2. Create 是属于 Constructor 的值吗?
答:构造函数一般就是Constructor Create(...)。
3.3. Free 是属于 Destructor 的值吗?
答:在Free方法里会调用析构函数Destructor Destroy。只有一个子方法才会有属于某个方法的说法。
3.4. 如果不用 Constructor 和 Destructor 会有什么负面效果出现?
答:每个类都有Constructor 和 Destructor,子类根据需要选择重载或不重载,无“负面”可言。

功课做完了。
ecjtu5208 2010-09-09
  • 打赏
  • 举报
回复
选错了颜色
2.1. Unit2 里的『function TCon.Runtest: string;』和『function TCon.Runtest(Value: string): string;』
的Result,它们有什么分别??
没有区别,都是指最终返回的结果2.2. 每个Function 里是不是都附带着Result(回函值)?
是的
2.3. Result := Value; <--这是什么,它是什么时候才出现?
Value是你的参数,function TCon.Runtest(Value: string): string;它什么时候出现取决于你,但至少一个函数在运行完以后必须要有一个结果result
2.4. while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j); <--这个 Result(回函值)是不是属于 while?
不是,属于你的function。
ecjtu5208 2010-09-09
  • 打赏
  • 举报
回复
2.1. Unit2 里的『function TCon.Runtest: string;』和『function TCon.Runtest(Value: string): string;』
的Result,它们有什么分别??
没有区别,都是指最终返回的结果
2.2. 每个Function 里是不是都附带着Result(回函值)?
是的
2.3. Result := Value; <--这是什么,它是什么时候才出现?
Value是你的参数,function TCon.Runtest([color=#FF0000]Value: string): string;它什么时候出现取决于你,但至少一个函数在运行完以后必须要有一个结果result[/color]
2.4. while j <= 5 do
begin
Result := Result + ' ' + IntToStr(j); <--这个 Result(回函值)是不是属于 while?
不是,属于你的function。
ecjtu5208 2010-09-09
  • 打赏
  • 举报
回复
1.1. 如果这样的情况下在Unit2 用Overload 指令对吗? 对啊,重载当然要Overload了,这个问题有点奇怪。
1.2. 有什么负面效果? 因为可以,所以没有负面效果。
1.3. 以你的建议,你会怎样以最好的方法使用Overload?
需要用到时候才用啊。
Overload即重载。作用是可以定义参数类型不相同或参数个数不同但名称相同的函数或过程,
例如你的
function Runtest : string; overload;
function Runtest(Value : string) : string; overload;
前者无参数,后者有一个参数。
重载也可用在子类继承父类的时候,子类中重载(注意,非覆盖)父类的方法,但在同一个类中是不能重载
Published中的函数或过程的。
例如
published
function Func(P: Integer): Integer;overload;
function Func(P: Boolean): Integer;overload;
编译器会报错.
published关键字是为了RTTI的方便使用才提出来的,是专门用来声明属性、事件的,这样,我们就可以在Design-Time对属性、事件进行处理;而不是用来声明函数、过程,它有它的专门作用。
所以无法在Published中进行重载。
L3nnon 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ecjtu5208 的回复:]

你这么多问题。才40分啊。我可是个唯利是图的人。
有点不值当。回答起来很容易,可是要你更容易接受,还是费劲。
我delphi装虚拟机里面,拷代码都费劲,
过会儿有时间给你说。
分太少啊。
尴尬
[/Quote]
>.<;;
等下补多 40分给你,
其实我的实在不够用。。
ecjtu5208 2010-09-09
  • 打赏
  • 举报
回复
你这么多问题。才40分啊。我可是个唯利是图的人。
有点不值当。回答起来很容易,可是要你更容易接受,还是费劲。
我delphi装虚拟机里面,拷代码都费劲,
过会儿有时间给你说。
分太少啊。
尴尬
L3nnon 2010-09-09
  • 打赏
  • 举报
回复
喔喔。 谢谢。。
学习了。。 学习了。。
L3nnon 2010-08-28
  • 打赏
  • 举报
回复
等到我劲都长了。。
都没人帮我的 =.=;;
L3nnon 2010-08-25
  • 打赏
  • 举报
回复
怎么没人鸟这个帖的 =.=;;
O.o;;
L3nnon 2010-08-23
  • 打赏
  • 举报
回复
谢谢你的意见。。 但你离题了。。。
但我希望有人帮我分析这个帖的主题。。
CaiBirdy 2010-08-23
  • 打赏
  • 举报
回复
学语言最重要的是要懂得举一反三,说白点就是要多尝试看资料后自己回答自己的问题,时候到了自然就会了。
学语言跟学编程是两码事。
L3nnon 2010-08-23
  • 打赏
  • 举报
回复
哎呀。。 谁可以救救我呢 =.=;;
林石公 2010-08-23
  • 打赏
  • 举报
回复
嗯,等级不代表水平,
加载更多回复(3)
 学习对象对java感兴趣,但没有任何软件编程基础,想先从零基础入手的软件开发爱好者;希望从另外一些简单的其他语言转型从事java开发的求职人员。适合大学生学习计算机入门,通过java语言计算机二级。想从事编程开发的人员、具有计算机基础、面试不过关的待业者、出校门的大学生、以及编程能力提升的从业者、以及世界500强的java工程师。 课程目标:你将对java内容有个全面的掌握,助编程能力的提升,让你理解500强企业要求的难度,通过计算机二级java语言考试 学习计划如果是待业者,明天用8个小时,会在两个月内完成。如果是上班族,每周至少用12-20小时,4-6个月内完成。课后有附加资料和练习来巩固知识并加强编程能力。此课程注重500强企业的编程能力实战要求。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点  。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。Java 具备下列特性。1.简单性Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。2.面向对象Java是一个面向对象的语言。对程序员来说,这意味着要注意应的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系有一个根类,它是具有一般行为的类。Java程序是用类来组织的。Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。3.分布性Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。4.编译和解释性Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。在一个解释性的环境,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。5.稳健性Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。异常处理是Java使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。6.安全性Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码的存储引用在运行时由Java解释程序决定实际存储地址。Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。7.可移植性Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。Java环境本身对新的硬件平台和操作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。8.高性能Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(央处理器)的机器代码,也就是实现全编译了。Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。9.多线程性Java是多线程语言,它提供支持多线程的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。10.动态性Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java的类是根据需要载入的,甚至有些是通过网络获取的。 尹成老师带你步入Java语言基础的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以Java语言为核心,完整精彩的演练了Java语言操作流程以及各种精彩的小项目等,提高竞赛能力,非常适合同学们学习!课程特色特色一:通俗易懂本视频语言简洁,通俗易懂,将难以理解的编程问题用简单清晰的语言描述,让你更容易理解。特色三:内容丰富本视频讲解的java语言知识更加丰富翔实,较之其他视频,本视频讲解的java语言知识更多更深入。特色三:配图详尽本视频在讲解知识点时都配图了表格或图示,在讲解案例时,都配备了流程图或分析图示,让你对所学知识点或案例理解更清晰。特色四:实战性强本视频讲解的每个知识都配备了一个小案例,这样既增加了学生动手能力,又巩固了学生所学知识。特色五:加入尹成老师微信群本视频尹成老师亲自答疑

5,390

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧