声明私有静态最终变量的原因

时间:2016-08-08 14:43:03

标签: java oop

为什么要为不可变类型将static final变量声明为private

在任何情况下声明public都可能会造成任何伤害吗?

5 个答案:

答案 0 :(得分:3)

因此,没有人可以从外部访问它并依赖于该值,让您可以自由地进行更改而不会产生副作用(至少在声明它的类之外)。

答案 1 :(得分:3)

有几个原因......

隐私

保持对客户端隐藏实现细节,例如仅供内部使用且不使用客户端的常量

安全

保护您的代码免受恶意客户端代码的侵害,例如:

static class A
{
    public final static List<String> list = buildList();

    public static List<String> buildList()
    {
        ArrayList<String> list = new ArrayList<>();
        list.addAll(Arrays.asList("A", "B", "C"));
        return list;
    }
}

static class B
{
    public static void main(String[] args)
    {
        A.list.clear();
        System.out.println(A.list);
    }
}

你不希望任何人操纵你的内部数据。

答案 2 :(得分:0)

将变量保持在适当的范围内是最好的OOP实践。一个例子是全局静态最终整数,用于在类中执行多个计算。暴露(公开)不仅可能导致问题,而且可能造成混乱。

假设您有一个课程,您需要知道pi的值:

public class MyClass {
    private static final double PI = 3.14159;

    //functions performing calculations with value of PI
}

pi的值仅在MyClass内需要,因此将其暴露是没有意义的 - 所有使用变量的计算都在MyClass内完成。如果再次需要它来执行计算,则应该在保持值的类中进行计算。

答案 3 :(得分:0)

public class GUICommon {
    private static final ExecutorService executorServices = Executors.newWorkStealingPool();

    public static void useExecutors(Runnable run) 
    {
    executorServices.execute(run);
    }
}

我以这种方式使用它。

答案 4 :(得分:-2)

static修饰符与final修饰符结合使用,也用于定义常量。最终修饰符表示此字段的值不能更改。

https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

如果使用public声明静态final变量,该变量将能够看到站点的类。如果有人试图在其他类中更改其值,则可能在编译时导致潜在的错误。

如果使用private声明静态final变量,则隐藏在其他类中。所以你可以避免这样的错误。