问题如题,我的代码大概如下: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);
}
}
http://blog.csdn.net/anqini/archive/2008/04/24/2319551.aspx
config = initConfig();
}这个静态初始化块就已经保证了。
static int i = 3;
static {
System.out.println("i = "+i);
}
public static void main(String[] args){
}
}如果是静态方法的话,就不用操心了,JVM会保证先初始化静态成员的.
静态成员是在类载入JVM时初始化的,静态方法是在调用时候执行.
谢谢各位,是我的配置文件放错地方了,一下子错以为config没被初始化,呵呵迷糊。
代码改成:private static AbstractConfiguration config = initConfig();
而不用静态代码块也是可以的吧?
比如只是调用了一个类的静态方法,那是不是有实例化这个类,来完成它的整个初始化过程?
跟new 的差别是什么呢?
调用静态方法不会造成类的实例化。只是会先进行类的静态初始化。
new ,创建类的实例,执行构造方法进行初始化。
你可以看看《java编程思想》。
当首次创建A类的对象,或者调用A类的静态变量和静态方法,java解释器就会去查找A.class的路径并加载之,载入A.class后,静态字段全都会被初始化~而且静态初始化也只在加载时进行一次。