Java:声明和初始化的最佳实践

时间:2017-07-26 08:22:21

标签: java memory reference heap allocation

我认为自己在Java方面经验丰富,但仍然有一些我不太确定的基本事项。

我总是尝试编写可维护,易读的代码,旨在实现最高效率。 例如,我只在真正需要时才调用“新”-Operator。

那是因为我不想不必要地分配内存。 但是支持变量呢?

很多人倾向于声明一个String只是为了分配一些长屁方法调用,如下所示:

String helper = Class.method1()。method2(param).getter();

我总是想知道这是不是分配了比需要更多的内存。 getter已经返回一个新的Object,现在通过另外引用它来分配更多的内存。 当我多次使用这个getter时,一个辅助字符串很方便,但如果只需要一次,那么直接传递该方法而不是声明一个新变量会不会更好? 这实际上是将内存分配给堆吗?

对象a,b,c,d,e,f,g,h,i,j ......;

我希望比我更有经验的Java人员可以告诉我他们如何处理这样的基本内容。谢谢! :)

2 个答案:

答案 0 :(得分:1)

这实际上是否将内存分配给堆? 不,它在堆栈上分配。全局变量在堆上分配。

当你的方法完成后,它将返回从堆栈中获取的已分配的memoryspace,并且该变量将不再有任何问题。

我一直想知道这是不是分配了比需要更多的内存 它将在堆栈上分配内存以引用变量。如果将函数作为参数传递,则不需要此引用。但是,仍然需要评估该功能,并且它的返回值放在堆栈上。如果为它声明一个变量,则必须执行一些额外的写入和读取,这在大多数情况下应该与当今高效的计算机无关。

答案 1 :(得分:0)

如果只能通过访问者(“setter”方法)设置成员,我更喜欢第一种风格。它提示初始化值是构造时的默认值。

如果在构造期间可以指定成员,我通常会使用较少的参数将默认值传递给构造函数中的相应构造函数。例如,

final class Example {

  private final String name;

  Example() {
    this("My Example");
  }

  Example(String name) {
    this.name = name;
  }

}