public class DaoFactory {
// private static int m=0;
private static DaoFactory daoFactory = new DaoFactory();
private static UserDao userDao;
//private static int i=0;
//private static int j=0;
//这里不能初始化为null。需要了解代码的执行顺序。函数在执行之前都会从userData开始,扫描后面每一个静态变量。这种运行方式确实奇怪
private DaoFactory() {
Properties prop = new Properties();
try {
InputStream inStream = new FileInputStream(new File("jdbc/daoconfig.properties"));
prop.load(inStream);
String userDaoImplClassName = prop.getProperty("userDaoImplClassName");
System.out.println(userDaoImplClassName);
userDao=(UserDao)Class.forName(userDaoImplClassName).newInstance();
// i++;
// j++;
// m++;
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
};
public static DaoFactory getInstance() {
System.out.println(daoFactory);
return daoFactory;
}
public UserDao getUserDao() {
System.out.println(daoFactory);
//System.out.println(i);
// System.out.println(j);
//System.out.println(m);
return userDao;
}
// private static int m=0;
private static DaoFactory daoFactory = new DaoFactory();
private static UserDao userDao;
//private static int i=0;
//private static int j=0;
//这里不能初始化为null。需要了解代码的执行顺序。函数在执行之前都会从userData开始,扫描后面每一个静态变量。这种运行方式确实奇怪
private DaoFactory() {
Properties prop = new Properties();
try {
InputStream inStream = new FileInputStream(new File("jdbc/daoconfig.properties"));
prop.load(inStream);
String userDaoImplClassName = prop.getProperty("userDaoImplClassName");
System.out.println(userDaoImplClassName);
userDao=(UserDao)Class.forName(userDaoImplClassName).newInstance();
// i++;
// j++;
// m++;
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
};
public static DaoFactory getInstance() {
System.out.println(daoFactory);
return daoFactory;
}
public UserDao getUserDao() {
System.out.println(daoFactory);
//System.out.println(i);
// System.out.println(j);
//System.out.println(m);
return userDao;
}
}
初始化是要分为两个阶段,第一阶段是分配空间,赋默认值。第二个阶段才是实际赋值
注意函数执行过程,静态变量在函数执行过程中值是如何变化的