You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java类变量安全优化:哪种修改可提升Foo类的安全性?

Java类Foo的安全性优化问题

原Foo类源码

public class Foo {
    public static String ALPHA = "alpha";
    protected String beta = "beta";
    private final String delta; 
    public Foo(String d) {
        delta = ALPHA + d;
    }
    public String Foo() {
        return beta;
    }
}

问题

请问哪种修改能提升Foo类的安全性?原因是什么?该问题涉及可见性修饰符及常量、变量的合理使用。

可选修改方案

  • 选项A:
    protected final String beta = "beta";
    
  • 选项B:
    private String delta;
    
  • 选项C:
    public static final String ALPHA = "alpha";
    
  • 选项D:
    public String beta = "beta";
    

正确选项及原因

正确选项是C,原因如下:

原代码中public static String ALPHA是一个可被全局修改的静态变量,任何外部类都能直接通过Foo.ALPHA = "非法值";篡改它的内容。一旦ALPHA被修改,所有依赖它的逻辑(比如构造方法里delta = ALPHA + d的赋值逻辑)都会产生不可预期的结果,严重破坏类的稳定性与安全性。

给ALPHA添加final修饰后,它变成了不可修改的公共静态常量:

  • static保证它是类级别的常量,无需为每个实例重复创建
  • final确保它的值在初始化后无法被任何代码修改,外部只能读取不能篡改
  • public的访问权限如果是业务需求(比如需要对外暴露这个固定常量),搭配final就完全没有安全风险

其他选项分析

  • 选项A:将beta改为protected final虽然让beta不可修改,但protected权限仍允许子类和同包类访问,且原beta的可修改风险远小于ALPHA的全局篡改风险,安全性提升有限,甚至可能违背beta原本的设计意图(比如子类可能需要修改beta)。
  • 选项B:去掉delta的final修饰,会让原本不可变的私有变量变成可修改状态,破坏了delta的不可变性,容易导致类内部状态不一致,反而降低安全性。
  • 选项D:将beta的权限扩大为public,会让任何外部类都能直接修改beta,明显降低了封装性与安全性。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:06:32