简单的问题,但有兴趣知道在声明中初始化Java变量是否是好的做法?我并不是真的一致;我倾向于初始化布尔,但没有别的。例如:
private Boolean test = false;
private Integer count;
我确信这是一个非常基本的问题,但我很想知道原因和时间?
答案 0 :(得分:3)
从Java Practices开始,JVM将隐式设置以下默认值:
实际上,如果您明确设置了这些值,则可能会导致操作两次。看看下面的示例类及其使用Oracle javac
编译的字节码:
public final class Quark {
public Quark(String aName, double aMass){
fName = aName;
fMass = aMass;
}
//PRIVATE
//WITHOUT redundant initialization to default values
//private String fName;
//private double fMass;
//WITH redundant initialization to default values
private String fName = null;
private double fMass = 0.0d;
}
没有冗余
>javap -c -classpath . Quark
Compiled from Quark.java
public final class Quark extends java.lang.Object {
public Quark(java.lang.String,double);
}
Method Quark(java.lang.String,double)
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 aload_0
5 aload_1
6 putfield #2 <Field java.lang.String fName>
9 aload_0
10 dload_2
11 putfield #3 <Field double fMass>
14 return
冗余:
>javap -c -classpath . Quark
Compiled from Quark.java
public final class Quark extends java.lang.Object {
public Quark(java.lang.String,double);
}
Method Quark(java.lang.String,double)
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 aload_0
5 aconst_null
6 putfield #2 <Field java.lang.String fName>
9 aload_0
10 dconst_0
11 putfield #3 <Field double fMass>
14 aload_0
15 aload_1
16 putfield #2 <Field java.lang.String fName>
19 aload_0
20 dload_2
21 putfield #3 <Field double fMass>
24 return
答案 1 :(得分:1)
这甚至可能是基于意见的解决方案,但我通常会避免在声明时初始化它(如下所示)。由于原始数据类型具有默认值且对象具有空引用,因此也会出现我初始化的情况。
但是,我在这种情况下初始化了:
public class Initializer{
private List<String> list = new ArrayList<>();
//Getters and //Setters
}
这是基于意见的观点。我单独初始化Array
和其他Collection
,因为它们有时会在我的服务层上导致NullPointerException
。是的,人们会建议修改Getters。但我更喜欢只在某些事件中初始化而不是每次都初始化。
答案 2 :(得分:0)
意见: 字段有明确定义的默认值(null,0,false),除非需要初始化,否则不应初始化它们非默认值。
但是你的问题标题是变量,我的意见是你也不应该初始化变量,除非需要。 &#34;需要&#34;在初始化之前,变量是int a = 0;
if (/*insert expression here*/)
a = 10;
else
a = 20;
(不是垃圾)。除非该变量为definitely assigned,否则您无法从变量中检索值。
我有时会看到以下内容:
<div id="test">test</div>
初始化程序是无关紧要的,无用的,并且具有误导性。 (我的真实意见使用更强的词)
答案 3 :(得分:0)