一个用来注册转换器的servlet
方法1: 正常执行!
package myFamily;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.util.Date;import org.apache.commons.beanutils.ConvertUtils;

public class MyServlet extends HttpServlet {

@Override
public void init() throws ServletException {

Class cla1;
try {
cla1=Class.forName("java.util.Date");

ConvertUtils.register(new MyConverter(), cla1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
方法2:  编译不通过
package myFamily;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.util.Date;import org.apache.commons.beanutils.ConvertUtils;

public class MyServlet extends HttpServlet {

@Override
public void init() throws ServletException {

Class cla1;
try {
cla1=Class.forName("java.util.Date");


} catch (ClassNotFoundException e) {
e.printStackTrace();
} ConvertUtils.register(new MyConverter(), cla1);
}
} 方法2就是把
ConvertUtils.register(new MyConverter(), cla1);
拿到了try{}catch()的外面,就提示
"变量cla1没有被初始化"
是什么原因,
这两种用法有区别吗?

解决方案 »

  1.   

    方法1与方法2的唯一区别就是
    方法2的ConvertUtils.register(new MyConverter(), cla1); 
    在try{}catch()的外面大家帮忙试一下,
    怎么会这样?
    方法1行,方法2就不行了呢?
      

  2.   

    假如try中失败,然还会往下执行ConvertUtils.register(new MyConverter(), cla1)这句,但cla1的确没有初始化啊。应:
    Class cla1 = null;
      

  3.   

    Class cla1 = null,才是初始化啊。。声明变量时不能忘记初始化呀!!
      

  4.   

    Class cla1 = null,才是初始化啊。。声明变量时不能忘记初始化呀!!
      

  5.   

    先让其等于null可解决编译问题。
    你的代码如果实例化异常,cla1将什么也不是。