Java设计(使用函数中的final字段)

Java设计(使用函数中的final字段),java,Java,我已经用Java编写了一年的程序,在过去的一年里我休息了一下,做了一些python。我回到了java,我对一些设计的东西感到困惑 假设我有一个类,它几乎做所有静态的事情 public class Example{ String list = {{"A", "apple"}, {"B","banana"}, {"C", "can"}} public static manipulateTheList(){ // do something with the a

我已经用Java编写了一年的程序,在过去的一年里我休息了一下,做了一些python。我回到了java,我对一些设计的东西感到困惑

假设我有一个类,它几乎做所有静态的事情

public class Example{

      String list = {{"A", "apple"}, {"B","banana"}, {"C", "can"}}

    public static manipulateTheList(){

        // do something with the above list

    }

    public static anotherManipulateTheList(){

        // do something with the above list

    }
}
它不允许我使用
this.list
,因为该方法是静态的。但我不认为每次都应该在方法中定义列表,因为类中的所有方法都将使用相同的列表


对于这种情况,有解决方案吗?最佳做法是什么?

您可以将列表声明为
静态成员,如果不打算重新分配,也可以将其声明为
最终成员:

private static final String LIST = {{"A", "apple"}, {"B", "banana"}, {"C", "can"}};
您可以参考实例和静态方法中的列表,如下所示:

Example.LIST

请注意,任何实例或静态方法都可以访问它。。。如果你修改它,变化将反映在任何地方。这就是为什么
静态成员如此危险。

您只能在静态方法中使用静态全局变量,但可以在实例方法中使用静态变量。困惑的嗯,单词static用于声明指向内存中确定位置的对象,因此您可以从任何类访问该值(这取决于访问修饰符public、private、protected和default)。静态方法通常被称为类方法,因为它们可以在没有类实例的情况下直接调用

如果您添加final修饰符,它将是一个常量,命名它的惯例是所有字母都大写,可能类似于:

public static final String[][] LIST = {{"a","b"},{"c","d"}};
//can be named LIST_LETTERS too
最后一个修饰符指示此值永远不会更改

我认为如果要在Util类上使用它,可以将方法声明为静态的,因此字符串数组可以是任何要作为参数的内容,并且方法将始终相同

您可以找到有关静态修改器的更多信息


我希望它能帮助您。

列表应该是常量还是随类的每个实例而变化?如果列表总是相同的,也许它应该是静态的,而您的方法不需要是静态的。