I could not find any references online about this. But just wanted to know if final fields in a class should always be static
or is it just a convention. Based
Absolutely not. Consider:
class Point {
public final int x;
public final int y;
public Point(int _x, int _y) {
x = _x;
y = _y;
}
}
Drop the final
, and the class becomes mutable. Add a static
, and all your points are the same, and there is no legal way to write the constructor.
Of course not. They must be static if they belong to the class, and not be static if they belong to the instance of the class:
public class ImmutablePerson {
private static final int MAX_LAST_NAME_LENGTH = 255; // belongs to the type
private final String firstName; // belongs to the instance
private final String lastName; // belongs to the instance
public ImmutablePerson(String firstName, String lastName) {
if (lastName.length() > MAX_LAST_NAME_LENGTH) {
throw new IllegalArgumentException("last name too large");
}
this.firstName = firstName;
this.lastName = lastName;
}
// getters omitted for brevity
}