首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java类的final字段应该始终是静态的吗?

java类的final字段应该始终是静态的吗?
EN

Stack Overflow用户
提问于 2013-02-17 02:06:33
回答 4查看 11.9K关注 0票数 22

我在网上找不到任何关于这方面的参考资料。但我只是想知道一个类中的最终字段是否应该始终为static,或者这只是一个约定。根据我对它们用法的理解,我觉得这更符合逻辑,而不是语言强加的东西。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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
}
票数 40
EN

Stack Overflow用户

发布于 2013-02-17 02:08:27

如果你想像ClassName.FIELD一样访问它们,那么是的,你必须这样做。如果你不把它设为静态的,你必须做一些像new ClassName().FIELD这样的事情,这是不必要的,而且是一个毫无意义的对象创建。

但是,如果您只在类中使用它或将其设为private,则不要将其设为静态。如果你在实际的类中,你可以只做FIELD

要完全掌握这个概念,您必须知道static是什么意思。静态意味着它属于实际的类,而不是它的一个实例。

票数 4
EN

Stack Overflow用户

发布于 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,所有的点都是一样的,并且没有合法的方法来编写构造函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14913442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档