解答:
和try catch没有关系,只要是块,就符合这个规则。包括if for while switch等。
一对花括号代表着一个作用域,当在try的花括号里面定义变量时,该变量只能在try{}中才有效,可以理解为该变量只属于try,finall{}里是找不到该变量的。
如果在try{}catch{}finally{}的外面定义变量,可以理解为是属于他们共有的。
错误例子
public User findUserById(String id) {
String sql = "select * from t_user where id = ?";
try {
int a = 1;
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
} catch (DataAccessException e) {
System.out.println("id = " + id + "用户不存在,一切正常");
e.printStackTrace();
}
System.out.println(a);//取不到
return user;//取不到
}
正确写法
public User findUserById(String id) {
String sql = "select * from t_user where id = ?";
int a = 1;
User user = null;
try {
user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
} catch (DataAccessException e) {
System.out.println("id = " + id + "用户不存在,一切正常");
e.printStackTrace();
}
System.out.println(a);//可以取到
return user;//可以取到
}