在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();

解决方案 »

  1.   

    刚才写错了,呵呵,现在重写在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) {
                     log.error("Initial SessionFactory creation failed.", ex);
                     throw new ExceptionInInitializerError(ex);        
                }    
        }
        //=====================这部分以上
        public static final ThreadLocal session = new ThreadLocal();
        .
        .
        .
        .}
    static{}这部分是什么意思啊?既不是HibernateUtil类的方法,也不是什么属性?
      

  2.   

    这部分相当于类的初始化,因为static是在类的概念上说的,没有构造函数一说,要把初始化的东西都放在static{}里面,相当于instance调用构造函数类似的
      

  3.   

    非常感谢believefym
    按你的说法,我可以理解为这部分代码相当于静态的构造函数?
    那么,是在所有实例化每一个HibernateUtil类型的对象时执行这些static代码呢,还是仅仅在实例化第一个HibernateUtil类型的对象时执行呢?
      

  4.   

    怕刚才说的不够明了,呵呵,再补充一下
    我想问的是,假如声明四个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()的时候执行?
      

  5.   

    执行一次,因为它是static的。