2013-11-22 2 views
1

Я использую jdk 1.7 в разработке моего приложения. Некоторые из людей, с которыми я говорю, говорят мне, что статический блок не будет выполняться в jdk 1.7, но этот файл выполняется. Может ли кто-нибудь объяснить это мне?Как этот статический блок выполняется в jdk 1.7

package com.treamis.util; 

    import javax.servlet.ServletException; 
    import org.apache.struts.action.ActionServlet; 
    import org.apache.struts.action.PlugIn; 
    import org.apache.struts.config.ModuleConfig; 
    import org.hibernate.cfg.AnnotationConfiguration; 
    import org.hibernate.SessionFactory; 

    public class HibernateUtil implements PlugIn { 

     private static final SessionFactory sessionFactory; 

     static { 
      try { 
       sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); 
      } catch (Throwable ex) { 
       System.err.println("Initial SessionFactory creation failed." + ex); 
       throw new ExceptionInInitializerError(ex); 
      } 
     } 

     public static SessionFactory getSessionFactory() { 
      return sessionFactory; 
     } 

     @Override 
     public void destroy() { 
     } 

     @Override 
     public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { 
     } 
    } 
+1

Вы попробовали написать небольшую программу с помощью простого статического блока? (Хотя fwiw, я слышал то же самое) –

+0

выполняется сначала, когда ваш класс лопнет. – subash

+0

«Некоторые из людей, с которыми я говорю, говорят мне» - Не слушайте людей. Только java (или, может быть, Гослинг) может рассказать вам, что он хочет и как это работает. – TheLostMind

ответ

4

Некоторые из людей, о которых я говорю, чтобы говорили мне, что статический блок не будет выполняться в JDK 1.7, но этот файл выполняется

Позвольте мне еще раз фраза заявление. Вы не можете выполнить класс, который содержит блок static, но не метод main, который формирует Java 7 и далее. Вы получите некоторую ошибку: «Основной метод не найден». Однако вы можете использовать эти классы из другого класса. Конечно, вы прямо не выполняете класс HibernateUtil? Это будет использоваться из другого места в вашем приложении для обработки SessionFactory.

Перед Java 7 вам разрешили выполнить класс, хотя он не содержал метод main, а всего лишь блок static.

-1

Я собираюсь объяснить это ясно ... неудобно спрашивать ур сомнения .. В предыдущей версии (до jdk 1.7) какой фактический процесс он загружает файл классов сначала, чем основной файл. Поскольку мы объявили весь статический класс, методы, переменные внутри класса, он загружается первым. Но позже (jdk 1.7) сначала выполняется поиск основного файла. поэтому в последних версиях мы не можем запускать любые методы и классы без основного. надеюсь, что это поможет ...

Смежные вопросы