在Hibernate的帮助文档里面的Quickstart with Tomcat一章看到这段代码
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class); private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed log.error("Initial SessionFactory creation failed.", ex); throw new ExceptionInInitializerError(ex); } } public static final ThreadLocal session = new ThreadLocal();
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class); private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed log.error("Initial SessionFactory creation failed.", ex); throw new ExceptionInInitializerError(ex); } } public static final ThreadLocal session = new ThreadLocal();
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
private static final SessionFactory sessionFactory;
//=====================这部分以下
static {
try {
// Create the SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
log.error("Initial SessionFactory creation failed.", ex);
throw new ExceptionInInitializerError(ex);
}
}
//=====================这部分以上
public static final ThreadLocal session = new ThreadLocal();
.
.
.
.}
static{}这部分是什么意思啊?既不是HibernateUtil类的方法,也不是什么属性?
按你的说法,我可以理解为这部分代码相当于静态的构造函数?
那么,是在所有实例化每一个HibernateUtil类型的对象时执行这些static代码呢,还是仅仅在实例化第一个HibernateUtil类型的对象时执行呢?
我想问的是,假如声明四个HibernateUtil类型的变量a,b,c,d的话,那么static{}里面的代码是在HibernateUtil a = new HibernateUtil()的时候,HibernateUtil b = new HibernateUtil()的时候,HibernateUtil c = new HibernateUtil()的时候,HibernateUtil d = new HibernateUtil()的时候都执行呢,还是仅仅在HibernateUtil a = new HibernateUtil()的时候执行?