首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在面向对象编程中引用类的最佳方式是什么?

在面向对象编程中引用类的最佳方式是什么?
EN

Stack Overflow用户
提问于 2013-11-18 01:59:07
回答 2查看 45关注 0票数 0

一个好的代码是每个程序员想要写的,优化的,健壮的,性能好的,可重用的,等等。我在面向对象编程方面做了相当长时间的编程。我见过许多不同的代码,其中不同的开发人员使用不同的引用机制。

一些开发人员使用

代码语言:javascript
运行
复制
Classname c = new Classname();
c.method();
c.method2();

等等。

虽然一些开发人员使用了以下策略

代码语言:javascript
运行
复制
(new ClassName()).method();
(new ClassName()).method2();

我想知道他们两个人最好的是什么,他们之间的实际区别是什么?

EN

回答 2

Stack Overflow用户

发布于 2013-11-18 02:05:39

代码语言:javascript
运行
复制
Classname c = new Classname();
c.method();
c.method2();

如果要重用对象,它在调用方法之前只创建一次对象,所以它比

代码语言:javascript
运行
复制
(new ClassName()).method();
(new ClassName()).method2();

这基本上就是在每次调用一个方法时创建一个新对象。

请考虑以下内容:

代码语言:javascript
运行
复制
(new ClassName()).getName(); // Returns default value John Doe
(new ClassName()).setName('Steve');
(new ClassName()).getName(); // Returns default value John Doe

Classname c = new Classname();
c.getName(); // Returns default value John Doe
c.setName('Steve');
c.getName(); // Returns Steve
票数 1
EN

Stack Overflow用户

发布于 2013-11-18 02:06:52

第二个例子没有任何意义。它表明ClassName是无状态的,因此您可以将方法设置为static。即使它们需要使用一些构造函数参数(虽然在您的示例中没有),如果您可以实例化一次,为什么还要实例化一个对象两次呢?在微尺度上,这比只创建一次对象要慢。此外,它对内存管理环境中的垃圾收集器也没有帮助。当然,在大多数情况下,这两个问题可以忽略不计。

对于第二个示例,我能想到的唯一情况是引导场景,在主分区中设置整个应用程序,并启动它:

代码语言:javascript
运行
复制
main()
{
    (new Application(...)).Run();
}

将只有一个应用程序对象,并且只需要调用一个方法,因此保留其实例的句柄实际上并不重要。另一个例子是启动一些自定义线程类来执行一些后台操作:

代码语言:javascript
运行
复制
{
    (new BackgroundWorkerThread(...)).Start();
}

我从未见过以您所介绍的方式从同一个类调用两个实例方法的合理示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20034177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档