我在网上找不到任何关于这方面的参考资料。但我只是想知道一个类中的最终字段是否应该始终为static
,或者这只是一个约定。根据我对它们用法的理解,我觉得这更符合逻辑,而不是语言强加的东西。
发布于 2013-02-17 02:09:30
当然不是。如果它们属于类,则它们必须是静态的;如果它们属于类的实例,则它们必须不是静态的:
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
}
发布于 2013-02-17 02:08:27
如果你想像ClassName.FIELD
一样访问它们,那么是的,你必须这样做。如果你不把它设为静态的,你必须做一些像new ClassName().FIELD
这样的事情,这是不必要的,而且是一个毫无意义的对象创建。
但是,如果您只在类中使用它或将其设为private
,则不要将其设为静态。如果你在实际的类中,你可以只做FIELD
。
要完全掌握这个概念,您必须知道static
是什么意思。静态意味着它属于实际的类,而不是它的一个实例。
发布于 2013-02-17 02:11:22
绝对不是。考虑一下:
class Point {
public final int x;
public final int y;
public Point(int _x, int _y) {
x = _x;
y = _y;
}
}
去掉final
,这个类就变得可变了。添加一个static
,所有的点都是一样的,并且没有合法的方法来编写构造函数。
https://stackoverflow.com/questions/14913442
复制相似问题