当前位置: 代码迷 >> J2EE >> 静态代码块有什么用?解决思路
  详细解决方案

静态代码块有什么用?解决思路

热度:31   发布时间:2016-04-17 23:32:24.0
静态代码块有什么用?
我在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对象时,静态代码块不会再执行一次
------解决思路----------------------
引用:
Quote: 引用:

jvm加载HibernateUtil类时,执行静态代码块
请问这里静态代码块中的内容能否写在构造器中?然后在new时再执行,这样可以吗?


静态代码只会执行一次,再次new对象的时候也不会执行。

而构造器每次new对象都会执行,这就是差别,看具体需求来选择。
------解决思路----------------------
类被加载的时候执行一次初始化,例如加载数据库驱动,放在静态代码块里执行,整个程序运行期间就只加载一次
------解决思路----------------------
类加载的时候初始化,而且只初始化一次
------解决思路----------------------
懒汉式单例模式额
  相关解决方案