I've just read the SUN java code conventions; very nice document btw. And I've read this
6.3 Initialization: Try to initialize local variables where they’re declared. The only reason not to initialize a variable where it’s declared is if the initial value depends on some computation occurring first.
And I was wondering if Class variables
are having same suggestion or not, for example I have:
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)));
}
}
}
EDITING CODE# If I would initialize the variable
where it's declared (in class), I would remove "line 2" and leave "line 3" because performance issue# reserving (rows) in memory as you know.
The question is:
To initialize a class member variable, put the initialization code in a static initialization block, as the following section shows. To initialize an instance member variable, put the initialization code in a constructor.
Classes and objects in Java must be initialized before they are used. You've previously learned that class fields are initialized to default values when classes are loaded and that objects are initialized via constructors, but there is more to initialization.
You should always initialize native variables, especially if they are class member variables. Class variables, on the other hand, should have a constructor defined that will initialize its state properly, so you do not always have to initialize them.
Local Variables. Local variables must be initialized before use, as they don't have a default value and the compiler won't let us use an uninitialized value.
These are instance variables, not class variables. Instance variables belong to a specific object, class variables don't (sorry to nitpick).
I think initializing the variable where it's declared is simpler and easier to read.
The jvm starts initializing instance variables and instance initializer blocks at the top of the file and works its way down, only after it has initialized all the variables and run the initializer blocks does it execute the constructor.
The line you quoted refers only to local variables. Because in Java local variables don't need to be declared at the top of the scope but can be declared anywhere before they are used, it makes a lot of sense.
For class and instance variables, my personal preference is to initialize the variable where it is declared. In many cases where I don't have any other constructors than the default this removes the need to have a default constructor written as the compiler will automatically provide one. I find this cleans up and shortens my code.
In the second case constructor you provided you can make a good case for initializing in the constructor.
With class variables I have found few times where I would want to initialize in the instantiation block instead of inline at the declaration.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With