Java 类静态初始化块中的类用法
可能在什么地方讨论过,但我没找到 我需要在类静态初始化块中加载类属性(Java 类静态初始化块中的类用法,java,class,static,Java,Class,Static,可能在什么地方讨论过,但我没找到 我需要在类静态初始化块中加载类属性(java.util.properties)。这样,即使不创建对象,也可以访问某些类常规选项。为此,我需要适当的类对象。当然,在null对象上访问此类类对象失败。像这样的 Class Name { private static Properties properties; static { Name.properties = new Properties(); Name.pro
java.util.properties
)。这样,即使不创建对象,也可以访问某些类常规选项。为此,我需要适当的类
对象。当然,在null
对象上访问此类类对象失败。像这样的
Class Name {
private static Properties properties;
static {
Name.properties = new Properties();
Name.properties.load(Name.class.getResourceAsStream("Name.properties"));
}
}
你知道怎么处理这种情况吗
更新:这是资源名称(对于我的案例,应该是“/name.properties”)。其他一切都很好。
+1感谢我和。。。不要忘记逐个检查操作:-)。
属性
字段必须是静态
。在load
之前,您需要使用proeprities=new Properties()
初始化静态变量,然后您可以调用load
属性
字段必须是静态
。在load
之前,您需要使用proeprities=newproperties()
初始化静态变量,然后可以调用load
将属性声明为静态并初始化
static Properties properties;
或
并且静态块应该是
static {
try {
properties = new Properties(); //if you have not initialize it already
Name.properties.load(Name.class.getResourceAsStream("Name.properties"));
} catch (IOException e) {
throw new ExceptionInInitializerError(e); //or some message in constructor
}
}
您需要在加载属性文件时捕获IOException将属性声明为静态并初始化
static Properties properties;
或
并且静态块应该是
static {
try {
properties = new Properties(); //if you have not initialize it already
Name.properties.load(Name.class.getResourceAsStream("Name.properties"));
} catch (IOException e) {
throw new ExceptionInInitializerError(e); //or some message in constructor
}
}
您需要在加载属性文件时捕获IOException,基于所有建议的最终代码如下所示:
Class Name {
private static final Properties properties = new Properties();
static {
try {
InputStream stream = Name.class.getResourceAsStream("/Name.properties");
if (stream == null) {
throw new ExceptionInInitializerError("Failed to open properties stream.");
}
Name.properties.load(stream);
} catch (IOException e) {
throw new ExceptionInInitializerError("Failed to load properties.");
}
}
}
基于所有建议的最终代码如下所示:
Class Name {
private static final Properties properties = new Properties();
static {
try {
InputStream stream = Name.class.getResourceAsStream("/Name.properties");
if (stream == null) {
throw new ExceptionInInitializerError("Failed to open properties stream.");
}
Name.properties.load(stream);
} catch (IOException e) {
throw new ExceptionInInitializerError("Failed to load properties.");
}
}
}
声明
properties
也是静态的。谢谢,它实际上是用原始代码完成的,输入错误。更正。我希望以下内容能对您有所帮助:如果您要将Name.properties设置为新的属性对象,则唯一可以为null的是getResourceAsStream
返回的值。确保Name.properties与.jar文件中的Name.class位于同一目录中。刚刚找到了相同的内容。也声明properties
static。谢谢,这实际上是在原始代码中完成的,输入错误。更正。我希望以下内容能对您有所帮助:如果您要将Name.properties设置为新的属性对象,则唯一可以为null的是getResourceAsStream
返回的值。确保Name.properties与.jar文件中的Name.class位于同一目录中。只需找到相同的内容。printStackTrace
是处理异常最糟糕的方法之一,除非Roman实际上不关心是否加载了属性文件。正确的操作过程是抛出新的运行时异常(e)代码>。我知道我只是想针对这个问题,OP需要正确处理异常。我不会为他写完整的代码:)一个例外的初始化错误会更好:“表示静态初始值设定项中发生意外异常。抛出ExceptionInInitializerError以指示在计算静态初始值设定项或静态变量初始值设定项期间发生异常。“@GyroGearless yes exceptionininitializerror更合适printStackTrace
是处理异常最糟糕的方法之一,除非Roman实际上不在乎是否加载了属性文件。正确的操作过程是抛出新的运行时异常(e)代码>。我知道我只是想针对这个问题,OP需要正确处理异常。我不会为他写完整的代码:)一个例外的初始化错误会更好:“表示静态初始值设定项中发生意外异常。抛出ExceptionInInitializeError以指示在对静态初始值设定项或静态变量的初始值设定项求值期间发生异常。“@GyroGearless yes ExceptionInInitializeError更合适