一个好的代码是每个程序员想要写的,优化的,健壮的,性能好的,可重用的,等等。我在面向对象编程方面做了相当长时间的编程。我见过许多不同的代码,其中不同的开发人员使用不同的引用机制。
一些开发人员使用
Classname c = new Classname();
c.method();
c.method2();
等等。
虽然一些开发人员使用了以下策略
(new ClassName()).method();
(new ClassName()).method2();
我想知道他们两个人最好的是什么,他们之间的实际区别是什么?
发布于 2013-11-18 02:05:39
Classname c = new Classname();
c.method();
c.method2();
如果要重用对象,它在调用方法之前只创建一次对象,所以它比
(new ClassName()).method();
(new ClassName()).method2();
这基本上就是在每次调用一个方法时创建一个新对象。
请考虑以下内容:
(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
发布于 2013-11-18 02:06:52
第二个例子没有任何意义。它表明ClassName
是无状态的,因此您可以将方法设置为static
。即使它们需要使用一些构造函数参数(虽然在您的示例中没有),如果您可以实例化一次,为什么还要实例化一个对象两次呢?在微尺度上,这比只创建一次对象要慢。此外,它对内存管理环境中的垃圾收集器也没有帮助。当然,在大多数情况下,这两个问题可以忽略不计。
对于第二个示例,我能想到的唯一情况是引导场景,在主分区中设置整个应用程序,并启动它:
main()
{
(new Application(...)).Run();
}
将只有一个应用程序对象,并且只需要调用一个方法,因此保留其实例的句柄实际上并不重要。另一个例子是启动一些自定义线程类来执行一些后台操作:
{
(new BackgroundWorkerThread(...)).Start();
}
我从未见过以您所介绍的方式从同一个类调用两个实例方法的合理示例。
https://stackoverflow.com/questions/20034177
复制相似问题