首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.setProperty和System.getProperty

System.setProperty和System.getProperty
EN

Stack Overflow用户
提问于 2014-01-18 12:50:07
回答 4查看 93.6K关注 0票数 33

我不明白当我使用System.setProperty来定义一个参数时,数据存储在哪里?

如果我在一个java文件中使用了System.setProperty,那么我可以在任何地方使用这些属性吗?但这不是真的,我不能在任何地方使用它,只能在我称为setProperty的同一个java文件中使用。

我真的不知道为什么,也不知道这种方法的作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-18 13:06:25

System类有一个名为props的static成员变量,它的类型为Properties。此外,PropertiesHashtable类的一个子类型。所有的属性值都以键和值的形式存储。因此,datastore is Hashtable.Answering是另一个问题,您可以在整个应用程序中很好地使用System.getProperty(propertyKey)方法,因为它是一个公共静态方法。您还不了解java程序是如何工作的。当您运行程序时,您实际上是在启动一个JVM实例。该实例将有自己的系统属性。你必须把你的财产放在那里。当您运行另一个程序时,它将拥有自己的系统属性。因此,您不能期望在一个JVM实例中设置的属性可以从另一个JVM实例中访问!您可以访问在同一个JVM实例中运行的所有类中的System.getProperty(propertyKey)。希望你能理解!

票数 74
EN

Stack Overflow用户

发布于 2014-01-18 13:19:52

如果您看到System的源代码,它有以下类变量

代码语言:javascript
复制
private static Properties props;

至于属性类,您可以将其看作是一个HashMap。它实际上扩展了HashMap。

代码语言:javascript
复制
public class Properties extends Hashtable<Object,Object>

当你打电话的时候

代码语言:javascript
复制
setProperty(String key, String value)

实际上是的

代码语言:javascript
复制
props.setProperty(key, value);

这只是摘要(也涉及到安全管理器检查)。

现在,为什么我说它是每个JVM实例?

当您启动Java进程时,将创建一个单独的JVM实例来运行您的进程。另外,由于支持是一个Class变量(而不是实例变量),所以它的一个副本将出现在相应的Class实例中,在加载该类时将对其进行设置。现在假设您没有任何自定义类加载器,在这种情况下,行为可能有所不同。但是对于简单的场景,System.setProperty()System.getProperty()将设置系统属性,您可以通过作为java进程(JVM)一部分运行的任何类访问这些属性。

票数 3
EN

Stack Overflow用户

发布于 2018-04-25 08:11:32

在第一个场景中,当A.java运行时,JVM将停止并释放所有值。当B.java运行时,JVM将重新启动。因此,这一价值将不会持续存在。

在第二个场景中,JVM不会在执行之间停止。因此,属性值将保持从第二个程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21204334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档