代码如下:
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;public class HibernateUtil {    private static final SessionFactory sessionFactory = buildSessionFactory();    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
         //System.out.println("执行了buildSessionFactory方法");
            return new AnnotationConfiguration().configure().buildSessionFactory();
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }}我想问的是,当使用类名直接调用getSessionFactory()方法的时候,为什么执行了buildSessionFactory()方法,它具体是什么时候开始执行的,我只知道类被加载后会先执行静态区里的语句,这个应该不能算作静态区的语句吧?
还有,final不是修饰常量的吗,为什么可以像第一句那样用呢(private static final SessionFactory sessionFactory = buildSessionFactory();),我怎么看都sessionFactory不像常量啊!请大虾们指教!

解决方案 »

  1.   

    为什么执行了buildSessionFactory()方法,它具体是什么时候开始执行的,顶下,不是很懂
    应该是当这个类第一次初始化时就把static的属性初始化了,
    也就执行了下面这句
    private static final SessionFactory sessionFactory = buildSessionFactory();
      

  2.   

    final 修饰的变量是不可以改变的,所以常用于常量定义。 用在这里就是说sessionFactory对象不可以改变了哟。