初始化静态最终变量时捕获异常

时间:2013-07-26 06:12:57

标签: java exception-handling static final

我有以下代码:

public class LoadProperty
{
public static final String property_file_location = System.getProperty("app.vmargs.propertyfile");
public static final String application-startup_mode = System.getProperty("app.vmargs.startupmode");
}

它从'VM arguments'读取并分配给变量。

由于静态最终变量仅在类加载时初始化, 如果有人忘记传递参数,我该如何捕获异常。

截至目前,当我使用'property_file_location'变量时,在以下情况下会遇到异常:

  • 如果存在值且位置错误,则会出现FileNotFound异常。
  • 如果未正确初始化(值为null),则抛出NullPointerException。

我只需要在初始化时处理第二种情况。

类似于第二个变量的情况。

整个想法是

  • 初始化应用程序配置参数。
  • 如果成功初始化,请继续。
  • 如果没有,请提醒用户并终止申请。

3 个答案:

答案 0 :(得分:4)

你可以这样抓住它:

public class LoadProperty
{
    public static final String property_file_location;

    static {
        String myTempValue = MY_DEFAULT_VALUE;
        try {
            myTempValue = System.getProperty("app.vmargs.propertyfile");
        } catch(Exception e) {
            myTempValue = MY_DEFAULT_VALUE;
        }
        property_file_location = myTempValue;
    }
}

答案 1 :(得分:2)

您可以使用其他答案建议的静态初始化程序块。更好的是将此功能移动到静态实用程序类,因此您仍然可以将它们用作单行程序。然后,您甚至可以提供默认值,例如

// PropertyUtils is a new class that you implement
// DEFAULT_FILE_LOCATION could e.g. out.log in current folder
public static final String property_file_location = PropertyUtils.getProperty("app.vmargs.propertyfile", DEFAULT_FILE_LOCATION); 

但是,如果预计这些属性不会一直存在,我建议不要将它们初始化为静态变量,而是在正常执行期间读取它们。

// in the place where you will first need the file location
String fileLocation = PropertyUtils.getProperty("app.vmargs.propertyfile");
if (fileLocation == null) {
    // handle the error here
}

答案 2 :(得分:0)

您可能想要使用静态集团:

public static final property_file_location;
static {
  try {
    property_file_location = System.getProperty("app.vmargs.propertyfile");
  } catch (xxx){//...}
}