Java 应该使用哪个变量声明?

Java 应该使用哪个变量声明?,java,variables,Java,Variables,我想写完美的Java代码,所以请允许我问这个问题 我想在我的方法中使用一个永不改变的字符串变量,如下所示: 1. String STR4SEARCH_START = "Abc"; 2. private final String STR4SEARCH_START = "Abc"; 3. private static final String STR4SEARCH_START = "Abc"; 4. public final String STR4SEARCH_START = "Abc"; 5.

我想写完美的Java代码,所以请允许我问这个问题

我想在我的方法中使用一个永不改变的
字符串
变量,如下所示:

1. String STR4SEARCH_START = "Abc";
2. private final String STR4SEARCH_START = "Abc";
3. private static final String STR4SEARCH_START = "Abc";
4. public final String STR4SEARCH_START = "Abc";
5. public static final String STR4SEARCH_START = "Abc";
我可以在我的方法中定义它,因为它不需要更改,我也可以在我的类中这样定义它:

1. String STR4SEARCH_START = "Abc";
2. private final String STR4SEARCH_START = "Abc";
3. private static final String STR4SEARCH_START = "Abc";
4. public final String STR4SEARCH_START = "Abc";
5. public static final String STR4SEARCH_START = "Abc";
这是我的问题:从方法1到方法5,哪一个是最好的,你能解释一下原因吗


非常感谢。

视情况而定。如果您希望其他人(您的班级以外的人)能够查看它,请使用
public
而不是
private
,反之亦然。除此之外,我当然会使用
static final
,因为正如您所说,您本质上想要定义一个不变的常量<代码>静态
,因为类的每个实例化不需要不同的值;
最终
,因为它的值不会改变。

这取决于具体情况。如果您希望其他人(您的班级以外的人)能够查看它,请使用
public
而不是
private
,反之亦然。除此之外,我当然会使用
static final
,因为正如您所说,您本质上想要定义一个不变的常量<代码>静态
因为类的每个实例化不需要不同的值,而
最终
因为其值不会更改。

因为它永远不会更改,所以在所有类实例中不需要多个副本,所以将其设为静态

同样,由于它永远不会更改,所以将其设置为最终版本,这样,如果代码试图更改它,编译器将报告错误。(也可能有运行时性能优势)

它应该是公共的还是私有的取决于您是否需要将它公开给其他类。喜欢私人的,只有在必要时才公开

I want to use a never change String variable 

因此,无论是私有静态最终版还是公共静态最终版(如果需要)。

因为它永远不会更改,所以在所有类实例中不需要多个副本,所以将其设置为静态

同样,由于它永远不会更改,所以将其设置为最终版本,这样,如果代码试图更改它,编译器将报告错误。(也可能有运行时性能优势)

它应该是公共的还是私有的取决于您是否需要将它公开给其他类。喜欢私人的,只有在必要时才公开

I want to use a never change String variable 
因此,可以是私有静态final,也可以是公共静态final(如有必要)

根据您的需求,我建议您创建一个名为ConstantCodes.java的类。这个类将在其中存储所有这些类型的变量。您可以在其中声明变量,如下所示。您可以将变量声明为
final
,因为它的值不会改变

public class ConstantCodes 
{
     public static final String STR4SEARCH_START = "Abc";
     ...
     ...
}
您可以从下面的任何类直接访问此变量

String myNewVariable = ConstantCodes.STR4SEARCH_START;
根据您的需求,我建议您创建一个名为ConstantCodes.java的类。这个类将在其中存储所有这些类型的变量。您可以在其中声明变量,如下所示。您可以将变量声明为
final
,因为它的值不会改变

public class ConstantCodes 
{
     public static final String STR4SEARCH_START = "Abc";
     ...
     ...
}
您可以从下面的任何类直接访问此变量

String myNewVariable = ConstantCodes.STR4SEARCH_START;

“我想制作完美的java代码”
:现在就退出,因为这永远不会发生,即使你的名字是詹姆斯·戈斯林我自己,我正在尝试创建“足够好”的代码。如果我只想在该类中使用该变量,那么我想我应该在类中定义它,并将其定义为“final”…如果它不需要更改,则声明它为final,如果它只需要在类内部可见,则声明它为private。
“我想制作完美的java代码”
:那么现在就退出,因为这永远不会发生,即使你的名字是詹姆斯·戈斯林。:)我自己,我正在尝试创建“足够好”的代码。如果我只想在那个类中使用那个变量,那么我想我应该在类中定义它,并且只是“final”…如果它不会被更改,则声明它为final,如果它只需要在类内部可见,则声明它为private。嗨,A.R.S,谢谢。如果我只想定义一个只在类中使用的不变常量,我可以使用“private final”吗?是的,当然可以,
private static final String VAR=“Abc”
。哦,是的,你也可以这样做。如果您希望类的每个实例的变量值都是唯一的,那么应该这样做。您好,a.R.S,谢谢。如果我只想定义一个只在类中使用的不变常量,我可以使用“private final”吗?是的,当然可以,
private static final String VAR=“Abc”
。哦,是的,你也可以这样做。如果希望类的每个实例的变量值都是唯一的,那么应该这样做。谢谢。“private final”可以吗?非静态设置不会改变程序的工作方式,但会“浪费”内存和时间,因为现在每个类实例的成员都会实例化一次,而静态设置会为您提供一个成员实例,而不管您分配了多少个类实例。谢谢。“private final”可以吗?使用非静态不会改变程序的工作方式,但会“浪费”内存和时间,因为现在每个类实例都会实例化一次成员,而将其设置为静态则会为您提供一个成员实例,而不管您分配了多少个类实例。