静态代码块有什么用?

Junior_s 2014-11-17 09:16:25
我在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);
}
}
}

其他无关的代码没有写。请问这个静态代码块是在什么时候执行的啊?为什么要这样?谢谢啊
...全文
754 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
小杨啵啵 2015-12-06
  • 打赏
  • 举报
回复
有点明白好吧好吧
huoxu 2014-11-17
  • 打赏
  • 举报
回复
懒汉式单例模式额
S117 2014-11-17
  • 打赏
  • 举报
回复
类加载的时候初始化,而且只初始化一次
Inhibitory 2014-11-17
  • 打赏
  • 举报
回复
类被加载的时候执行一次初始化,例如加载数据库驱动,放在静态代码块里执行,整个程序运行期间就只加载一次
猿人林克 2014-11-17
  • 打赏
  • 举报
回复
引用 4 楼 u010126977 的回复:
引用 1 楼 u013972119 的回复:
jvm加载HibernateUtil类时,执行静态代码块
请问这里静态代码块中的内容能否写在构造器中?然后在new时再执行,这样可以吗?
静态代码只会执行一次,再次new对象的时候也不会执行。 而构造器每次new对象都会执行,这就是差别,看具体需求来选择。
rex_J 2014-11-17
  • 打赏
  • 举报
回复
静态代码块会预加载,只会被执行一次,一般在里面放一些需要提前加载又不需要多次加载的东西,和构造方法还是有一些差别的,第二次new对象时,静态代码块不会再执行一次
  • 打赏
  • 举报
回复
引用 6 楼 w405112941 的回复:
静态代码块主要就是在加载的时候执行,而且只执行一次,有唯一性,写在构造器中就没有意义了
楼上说的对~
Mr_sqw 2014-11-17
  • 打赏
  • 举报
回复
引用 12 楼 longhun012 的回复:
懒汉式单例模式额
有意思
The_end90 2014-11-17
  • 打赏
  • 举报
回复
静态代码块主要就是在加载的时候执行,而且只执行一次,有唯一性,写在构造器中就没有意义了
江南小鱼 2014-11-17
  • 打赏
  • 举报
回复 2
在项目启动时,静态代码块就执行初始化(主动执行初始化) 静态代码块在类的生命周期中只执行一次,保存在堆内存上,类或者类实例均可以访问 拿你的代码来讲,项目启动起来sessionFactory就有值了
Junior_s 2014-11-17
  • 打赏
  • 举报
回复
引用 1 楼 u013972119 的回复:
jvm加载HibernateUtil类时,执行静态代码块
请问这里静态代码块中的内容能否写在构造器中?然后在new时再执行,这样可以吗?
lj小君 2014-11-17
  • 打赏
  • 举报
回复
静态代码块初始化早
Mr_sqw 2014-11-17
  • 打赏
  • 举报
回复
这里应该是为了获取一个单例sessionFactory
Mr_sqw 2014-11-17
  • 打赏
  • 举报
回复
jvm加载HibernateUtil类时,执行静态代码块

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧