java初学者:初始化类变量
我刚刚阅读了SUN java代码约定;非常好的文件顺便说一句,我读过这个 6.3 初始化: 尝试初始化声明的局部变量。不初始化 声明的变量是初始值是否取决于首先发生的某个计算 我想知道java初学者:初始化类变量,java,constructor,initialization,declaration,Java,Constructor,Initialization,Declaration,我刚刚阅读了SUN java代码约定;非常好的文件顺便说一句,我读过这个 6.3 初始化: 尝试初始化声明的局部变量。不初始化 声明的变量是初始值是否取决于首先发生的某个计算 我想知道类变量是否有相同的建议,例如: public class NNmatrix { protected ArrayList<ArrayList<Double>> matrix; // line 1 public NNmatrix() { matrix =
类变量
是否有相同的建议,例如:
public class NNmatrix {
protected ArrayList<ArrayList<Double>> matrix; // line 1
public NNmatrix() {
matrix = new ArrayList<ArrayList<Double>>(); // line 2
}
/**
*
* @param otherMtrx
*/
public NNmatrix(final ArrayList<ArrayList<Double>> otherMtrx) {
final int rows = otherMtrx.size();
matrix = new ArrayList<ArrayList<Double>>(rows); // line3
for (int i = 0; i < rows; i++) {
this.matrix.add(new ArrayList<Double>(otherMtrx.get(i)));
}
}
}
public类矩阵{
受保护的ArrayList矩阵;//第1行
公共矩阵(){
矩阵=新的ArrayList();//第2行
}
/**
*
*@param otherMtrx
*/
公共NNmatrix(最终阵列列表其他MTRx){
final int rows=otherMtrx.size();
矩阵=新数组列表(行);//第3行
对于(int i=0;i
编辑代码#如果我要初始化变量
声明的位置(在类中),我会删除“第2行”并保留“第3行”,因为性能问题#如您所知,在内存中保留(行)
问题是:
jvm开始初始化文件顶部的实例变量和实例初始值设定项块,然后向下运行,只有在初始化所有变量并运行初始值设定项块之后,jvm才会执行构造函数。您引用的行仅指局部变量。因为在Java中,局部变量不需要在作用域的顶部声明,而是可以在使用它们之前在任何地方声明,所以这很有意义 对于类和实例变量,我个人的偏好是在声明变量的地方初始化变量。在许多情况下,除了默认构造函数之外,我没有任何其他构造函数,这就不需要编写默认构造函数,因为编译器会自动提供一个。我发现这会清理并缩短我的代码 在您提供的第二个构造函数中,可以很好地说明在构造函数中初始化的情况
对于类变量,我发现有几次我希望在实例化块中进行初始化,而不是在声明中进行内联初始化。您有两个不同的选项,它们可能都属于微优化。通常,除非您在并发环境中使用静态变量,或者执行类似于池类的时髦操作,否则这些类型的优化就不太重要了
我会支持你的代码保持原样 虽然通常我喜欢在声明时初始化实例变量,但当我必须在某些构造函数中重新初始化它们时,我不喜欢这样做。我更喜欢在声明中初始化,或者在每个构造函数路径中初始化(可能只是在每个其他构造函数调用的单个构造函数中)。纯声明表示正在发生更复杂的事情,而将最简单的初始化移到声明中可以隐藏这一点