问题如题,我的代码大概如下:package web;
import java.io.File;import org.apache.commons.configuration.AbstractConfiguration;
import org.apache.commons.configuration.CombinedConfiguration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.DefaultConfigurationBuilder;public class CopyOfConfig { private static AbstractConfiguration config = null;//builder.getConfiguration(true); static{
config = initConfig();
}
private static CombinedConfiguration initConfig()
{
DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
builder.setFile(new File("configuration.xml")); CombinedConfiguration config;
try
{
config = builder.getConfiguration(true);
return config;
}catch (ConfigurationException e)
{
e.printStackTrace();
} return null;
} public static String getString(String key)
{
// TODO Auto-generated method stub
return config.getString(key);
}

}

解决方案 »

  1.   

    建议你看这个,我写的,关于初始化问题
    http://blog.csdn.net/anqini/archive/2008/04/24/2319551.aspx
      

  2.   

    static{
            config = initConfig();
        }这个静态初始化块就已经保证了。
      

  3.   

    如果是静态块的话,把初始化写在调用之前就OK.public class HelloJava {

    static int i = 3;
    static {
    System.out.println("i = "+i);
    }
    public static void main(String[] args){

    }
    }如果是静态方法的话,就不用操心了,JVM会保证先初始化静态成员的.
    静态成员是在类载入JVM时初始化的,静态方法是在调用时候执行.
      

  4.   


    谢谢各位,是我的配置文件放错地方了,一下子错以为config没被初始化,呵呵迷糊。
      

  5.   

    补充楼上
    代码改成:private static AbstractConfiguration config = initConfig();
    而不用静态代码块也是可以的吧?
      

  6.   


    比如只是调用了一个类的静态方法,那是不是有实例化这个类,来完成它的整个初始化过程?
    跟new 的差别是什么呢?
      

  7.   


    调用静态方法不会造成类的实例化。只是会先进行类的静态初始化。
    new ,创建类的实例,执行构造方法进行初始化。
      

  8.   

    静态成员变量呵静态方法不一样。静态成员变量是要在加载类的时候就初始化的。而静态方法只是说可以通过类名来直接调用。它不会在类加载的时候被调用。
    你可以看看《java编程思想》。
      

  9.   

    假设有个名为A的类,
    当首次创建A类的对象,或者调用A类的静态变量和静态方法,java解释器就会去查找A.class的路径并加载之,载入A.class后,静态字段全都会被初始化~而且静态初始化也只在加载时进行一次。