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

在Java中通过-D参数声明自定义系统属性会发生什么?

Java中-D自定义系统属性的运行机制
  • -D参数的作用与生命周期
    用java -Dcustom_key=custom_value some_class启动程序时,这个自定义系统属性是直接注入到当前JVM进程的内存中的,和JVM自带的系统属性(比如user.dir)一样,仅在这次运行的JVM生命周期内有效。一旦程序执行完毕、JVM进程终止,这个属性就会被释放,不会留下任何持久化的痕迹。

  • 和编译过程的关系
    Java的编译(javac命令)与运行(java命令)是完全独立的两个阶段:

    • 编译阶段只负责将.java源码转换成.class字节码,不会读取或依赖任何运行时的系统属性;
    • 系统属性是运行时才生效的配置,和编译环节没有任何关联。所以不管你之前有没有用过-D参数,下次运行程序时如果需要使用这个自定义属性,必须重新通过-D参数声明,不存在“一次声明后续无需再写”的情况。
  • 实际使用示例
    假设你的SomeClass里有这段代码:

    public class SomeClass {
        public static void main(String[] args) {
            String customVal = System.getProperty("custom_key");
            System.out.println(customVal);
        }
    }
    
    • 执行java -Dcustom_key=custom_value SomeClass,会输出custom_value;
    • 直接执行java SomeClass,会输出null,因为没有注入这个属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:12:22