我在hibernate项目中看到这么一块儿代码,在HibernateUtil类中:
public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static final ThreadLocal session = new ThreadLocal();
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
}
其他无关的代码没有写。请问这个静态代码块是在什么时候执行的啊?为什么要这样?谢谢啊
------解决思路----------------------
jvm加载HibernateUtil类时,执行静态代码块
------解决思路----------------------
这里应该是为了获取一个单例sessionFactory
------解决思路----------------------
静态代码块初始化早
------解决思路----------------------
在项目启动时,静态代码块就执行初始化(主动执行初始化)
静态代码块在类的生命周期中只执行一次,保存在堆内存上,类或者类实例均可以访问
拿你的代码来讲,项目启动起来sessionFactory就有值了
------解决思路----------------------
静态代码块主要就是在加载的时候执行,而且只执行一次,有唯一性,写在构造器中就没有意义了
------解决思路----------------------
楼上说的对~
------解决思路----------------------
静态代码块会预加载,只会被执行一次,一般在里面放一些需要提前加载又不需要多次加载的东西,和构造方法还是有一些差别的,第二次new对象时,静态代码块不会再执行一次
------解决思路----------------------
静态代码只会执行一次,再次new对象的时候也不会执行。
而构造器每次new对象都会执行,这就是差别,看具体需求来选择。
------解决思路----------------------
类被加载的时候执行一次初始化,例如加载数据库驱动,放在静态代码块里执行,整个程序运行期间就只加载一次
------解决思路----------------------
类加载的时候初始化,而且只初始化一次
------解决思路----------------------
懒汉式单例模式额