Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java类中使用的常量放在哪里?_Java - Fatal编程技术网

java类中使用的常量放在哪里?

java类中使用的常量放在哪里?,java,Java,我想知道在哪里放置只在一个java类中使用的常量?我的代码为共享内存创建了一个名称,称为“sharedMemory”,但我不确定是应该放在单独的Java文件中,还是应该在同一个类中定义私有静态最终字符串shared_memory=“sharedMemory”我只在特定类中需要此变量。另外,如果我在同一个类中定义,我应该使它成为静态的吗? class ABC{ private static final String SHARED_MEMORY = "sharedMemory"; // OK to

我想知道在哪里放置只在一个java类中使用的常量?我的代码为共享内存创建了一个名称,称为“sharedMemory”,但我不确定是应该放在单独的Java文件中,还是应该在同一个类中定义私有静态最终字符串shared_memory=“sharedMemory”我只在特定类中需要此变量。另外,如果我在同一个类中定义,我应该使它成为静态的吗?

class ABC{

private static final String SHARED_MEMORY = "sharedMemory"; // OK to define in same class or in separate constants file

   public void get(){
   String name;
    if(checIfSharedMemoryNeeded()){
      name  = SHARED_MEMORY;
    }
   }

   private boolen checIfSharedMemoryNeeded(){
     return (x.equals("yuiyr") && y.equals("yweir"))
   }
}

对于如何做,没有通用的指导方针。因为它只在一个地方使用,我建议你把它留在使用它的课堂上


除非您希望在将来更改该值,并且有许多其他硬编码的值要在以后更改,否则我建议您创建一个包含所有这些值的类配置。

如果此常量仅用于该类,则应声明它们是相同的类作用域


现在你要想一想,如果你将来要改变价值。如果这样做了,并且应用程序可以扩展,那么最好创建一个.properties文件来保存所有值并加载到应用程序中。

Java中非全局常量的一般约定是使用
private static final
编写,如下所示:

class Foo {
    private static final String bar = "foobar";

    ...
}

定义仅在该类中的单个类中需要的常量,并将其设置为私有。您可以确保它不会意外地在其他任何地方使用

private static final String ONLY_FOR_THIS_CLASS = "only here";
定义上下文绑定到特定类但在上下文绑定到的该类中的其他类中可能需要的常量,但将其
公开

public static final String CONTEXTUALLY_FOR_THIS_CLASS_BUT_USABLE_ANYWHERE = "everywhere";
它将允许在其他类中使用,如

String constantValueFromOtherClass = OtherClass.CONTEXTUALLY_FOR_THIS_CLASS_BUT_USABLE_ANYWHERE;

如果您想到一个只包含公共常量的类,那么可以考虑编写一个
enum
。在许多情况下,
enum
s将是更好的解决方案。

如果你想在ABC类中使用这个变量(共享内存),那么私有访问说明符是可以的,如果这个变量是你类的一部分而不是对象,那么使用static是个好主意。

你只需要在那个特定类中使用这个常量吗?如果是,它应该是私有的(因为它是私有的),然后它将位于正确的位置。您只需要在这个类中使用它,因此,在它所在的位置就可以了。是否有必要使它成为静态的?@Reena有必要,没有,但它避免使用您不需要的系统资源。如果每个实例都必须相同,为什么要为每个实例创建变量?@Reena Stultuske的意思是:这不是必需的,但更好,因为资源密集度更低。“除非你想在将来更改值”。这有什么关系?限制不在于它有什么价值,而在于它在哪里使用。在大型项目中,很难获得所有这些价值的概述。它们通常不会保持不变。考虑一下这个例子:你有一个游戏。NPC有硬编码对话框。特定的行只在代码中的一个位置使用,但其他行将在其他位置使用。如果所有对话框都在单独的类中,则很难对它们进行概述。此外,如果你想支持不同的语言。然后你可以有一个EnglishDialog类和一个FrenchDialog类。要么它们保持相同的值,要么它们不是常量。它们在编译时是常量,但代码总是可以更改。NPC对话框是一个不好的例子,因为它不是常量的用例,而是某种消息源模式。