我不明白当我使用System.setProperty来定义一个参数时,数据存储在哪里?
如果我在一个java文件中使用了System.setProperty,那么我可以在任何地方使用这些属性吗?但这不是真的,我不能在任何地方使用它,只能在我称为setProperty的同一个java文件中使用。
我真的不知道为什么,也不知道这种方法的作用。
发布于 2014-01-18 13:06:25
System类有一个名为props的static成员变量,它的类型为Properties。此外,Properties是Hashtable类的一个子类型。所有的属性值都以键和值的形式存储。因此,datastore is Hashtable.Answering是另一个问题,您可以在整个应用程序中很好地使用System.getProperty(propertyKey)方法,因为它是一个公共静态方法。您还不了解java程序是如何工作的。当您运行程序时,您实际上是在启动一个JVM实例。该实例将有自己的系统属性。你必须把你的财产放在那里。当您运行另一个程序时,它将拥有自己的系统属性。因此,您不能期望在一个JVM实例中设置的属性可以从另一个JVM实例中访问!您可以访问在同一个JVM实例中运行的所有类中的System.getProperty(propertyKey)。希望你能理解!
发布于 2014-01-18 13:19:52
如果您看到System的源代码,它有以下类变量
private static Properties props;至于属性类,您可以将其看作是一个HashMap。它实际上扩展了HashMap。
public class Properties extends Hashtable<Object,Object>当你打电话的时候
setProperty(String key, String value)实际上是的
props.setProperty(key, value);这只是摘要(也涉及到安全管理器检查)。
现在,为什么我说它是每个JVM实例?
当您启动Java进程时,将创建一个单独的JVM实例来运行您的进程。另外,由于支持是一个Class变量(而不是实例变量),所以它的一个副本将出现在相应的Class实例中,在加载该类时将对其进行设置。现在假设您没有任何自定义类加载器,在这种情况下,行为可能有所不同。但是对于简单的场景,System.setProperty()和System.getProperty()将设置系统属性,您可以通过作为java进程(JVM)一部分运行的任何类访问这些属性。
发布于 2018-04-25 08:11:32
在第一个场景中,当A.java运行时,JVM将停止并释放所有值。当B.java运行时,JVM将重新启动。因此,这一价值将不会持续存在。
在第二个场景中,JVM不会在执行之间停止。因此,属性值将保持从第二个程序。
https://stackoverflow.com/questions/21204334
复制相似问题