java - 静态或静态最终

标签 java class object static final

我有一个关于类和对象的作业。 类是电视,电视对象会有属性,有些是常量

• 制造商。制造商属性将包含品牌名称。一旦电视被创建,这就不能改变,所以将是一个命名常量。

• 屏幕尺寸。 screenSize 属性将保存电视屏幕的大小。这不能改变

我不确定我对常量字段的声明,我无法理解它们如何保持不变 他们应该是 static final 还是 final 我如何保证一旦创建了对象,值就不会改变

 class Television {

     private  final String MANUFACTURER;
     private final int SCREEN_SIZE;
     private boolean powerOn;
     private int channel ;
     private int volume ;

    public Television(String MANUFACTURER, int SCREEN_SIZE) {
        this.MANUFACTURER = MANUFACTURER;
        this.SCREEN_SIZE = SCREEN_SIZE;
        this.volume = volume;
    }

最佳答案

我认为您混淆了常量变量和不可变类属性。

  • 常量通常是指在整个程序中保持不变的事物。一个很好的例子是 Math.PI,它们被声明为 static + final。
  • 不可变的概念是在对象创建后不能更改的属性,这可以使用 final 强制执行,或者简单地声明私有(private)而不提供 setter。

您的 Television 对象可能有不同的制造商和屏幕尺寸,因此您不能使用静态,因为这会使所有实例都相同。

此外,仅对常量使用 CAPITALS_WITH_UNDERSCORES 是标准约定,例如静态 + 最终。

所以我将你的类声明为:

class Television {

    private final String manufacturer;
    private final int screenSize;
    private boolean powerOn;
    private int channel;
    private int volume;
    public Television(String manufacturer, int screenSize) {
        this.manufacturer = manufacturer;
        this.screenSize = screenSize;
        this.volume = volume;
    }
}

并可能在其他地方将您的制造商声明为常量

public static final String SONY = "Sony";
public static final String SAMSUNG = "Samsung";

关于java - 静态或静态最终,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27779720/

相关文章:

java - 在 netbeans 中着色 jtable 行

java - 从串行端口读取整个消息

C++:如何在结构中定义类实例。类具有参数化构造函数

Ruby:扩展模块的类

c# - 从变量实例化泛型类型

python - 如何拥有默认对象属性并可以选择设置它?

java - 如何根据引用的实体交换@JsonBackReference和@JsonManagedReference

java - 使用 Java 8 Parallel Stream 在并行读取多个文件时排除一些文件

c# - 抽象类与调用基础

java - 对象序列化的魔法仙女