Java singleton类中的私有静态final字段

Java singleton类中的私有静态final字段,java,static,singleton,field,final,Java,Static,Singleton,Field,Final,如果在单例类静态final或just final中声明/不声明字段是私有的且只能从类本身访问,是否会产生任何后果?或者这只是一场空间/标签战争?没有后果。基本上,singleton是一个实例(只有一个实例),因此使用类成员字段(静态字段)是不利于设计的。我会避免使用静态字段单例设计模式是为了确保在应用程序运行时只有一个类实例。这个单例对象将被其他对象使用,以便调用它的公共方法,因此您应该向其他对象公开一个公共静态方法,以便获得单例的实例,因此字段也应该是静态的 我可以问一下这个问题本身有什么问题

如果在单例类静态final或just final中声明/不声明字段是私有的且只能从类本身访问,是否会产生任何后果?或者这只是一场空间/标签战争?

没有后果。基本上,singleton是一个实例(只有一个实例),因此使用类成员字段(静态字段)是不利于设计的。我会避免使用静态字段

单例设计模式是为了确保在应用程序运行时只有一个类实例。这个单例对象将被其他对象使用,以便调用它的公共方法,因此您应该向其他对象公开一个公共静态方法,以便获得单例的实例,因此字段也应该是静态的

我可以问一下这个问题本身有什么问题吗?我想要一个更详细的答案,在幕后,java内部工作,字节码级别的有效差异。问题是,这到底有没有区别?就像空间/标签战争…而不是设计模式。单例是一种设计模式。除此之外,它是一个普通的java类,它之所以成为单例类,是因为您遵循了该模式。若你们谈论java,若你们能在singleton类中有静态的final字段——是的,你们能,它不会有任何区别。它是一个普通的java类,可以做其他java类可以做的事情。编译器以同样的方式编译它。它在顶层是如何设计的(例如,不允许超过实例),但在底层是一个普通类。除非您为单例实现使用枚举,但是。。。是一样的;)Enum也是有自己方法的类,extedning java.lang.Enum:)我需要确凿的证据证明以这种方式组合的两个关键字之间的差异,或者可能需要一个解决方案如何测试它…这个问题与实现singleton模式和访问singleton实例变量无关。好的,我明白你现在的要求了。关于这个字段如果你将这个字段声明为final,你应该初始化它,如果这个字段可以初始化,你就不能获得一些内存。声明字段static final private和only final private之间没有区别,因为静态字段将与此对象的所有实例共享,但您在这里有一个单例,所以没有区别。我们正在接近,区别之一是字段初始化必须从构造函数或静态块进行。但我需要更多…比如字节码级别的差异。如果它只是这个类的一个常数,那么就没有真正的区别。有效的java说,创建不可变对象以实现线程安全。请确保JVM在这种情况下生成的字节码之间存在差异。关于线程安全,如果此字段是一个不会导致多线程问题的常量,则应将此字段声明为原子字段。如果它是一个原语,您可以使用atomicInteger或AtomicBoolean;如果不是,您可以使用AtomicReference类,以确保代码是线程安全的。