2015-09-29 4 views
0

У меня есть этот код ниже, и он не работает. Однако, если я объявляю переменную Integer перед циклом while, она может работать. Выход будет напечатан.Невозможно объявить переменную внутри цикла While

 query = "SELECT COUNT(*) AS tot_by_code FROM `hr` WHERE `hr`.`code` = ?";    
     st = conn.prepareStatement(query); 
     st.setString(1, code); 
     rs = st.executeQuery(); 

     //Integer tot_by_code = null; 
     while (rs.next()) { 
      Integer tot_by_code = rs.getInt("tot_by_code"); 
     } 


     System.out.println("Total patient by code : " + tot_by_code); 

проверить другую нить и, мол, вы можете объявить переменную перед цикл или внутри цикла, так почему я не могу пробежал код с объявления переменной внутри цикла While? Заранее спасибо.

ответ

4

Вы можете объявить его внутри цикла. Проблема в том, что она будет видна только в этом цикле, так что вы не сможете получить доступ к ней за ее пределами. Если вы хотите распечатать его снаружи, вы также должны объявить его снаружи.

Подробнее о сфере применения см. JLS §6.3.

В частности:

Область действия локальной переменной в блоке (§14.4) является остальная часть блока, в котором декларация появляется

2

вы видели, что tot_by_code завернутый в скобки, который называется переменной областью. так из стороны области видимости никто не знает о том tot_by_code ..

System.out.println("Total patient by code : " + tot_by_code); 

но здесь вы пытаетесь получить доступ вне сферы. поэтому объявляем перед циклом.

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