java静态成员静态代码块初始化顺序

最近写一个配置类打算配置文件的信息 用一个配置类的静态成员保存,所以在静态代码块里读取配置文件。考虑类 加载   后  类静态成员变量与类静态代码块的执行顺序问题。 如果静态代码块先实行  而类的 静态成员变量未执行。那 在静态成员变量初始化之前 就向静态成员变量赋值是不是会出 问题。

 

经测试 非实例对象 执行的顺序 是   类加载  首先初始化 类静态成员变量 类静态代码块 ,静态方法是调用的时候执行。

 

package com.yjm.ldapdao;

import java.io.IOException;
import java.util.Properties;

import org.apache.log4j.Logger;

public class LdapConf {

 public LdapConf() {
 }
 

 
 public static Logger logger= Logger.getLogger(LdapConf.class);
 public static String host="test";
 public static String port;
 public static String username;
 public static String password;
 public static Properties properties;
 static {
  properties = new Properties();
  try {
   properties.load(LdapConf.class
     .getResourceAsStream("info.properties"));
   host=properties.getProperty("host");
   System.out.println(host);
  } catch (IOException e) {
   e.printStackTrace();
  }

 }
 
 public static void test(){
  host="sdfg";
  System.out.println(host);
 }
 public static void main(String[] args) {
  System.out.println(host);
  
  
 }
}

 

 

结果:

172.16.0.171
172.16.0.171

你可能感兴趣的:(静态执行顺序)