为什么private不能修饰userService?求解

private UserServiceImpl userService = new UserServiceImpl();报错,说private不允许写在这


public class RegistServlet extends HttpServlet {
    

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        private UserServiceImpl userService = new UserServiceImpl();

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String email = req.getParameter("email");
        String code = req.getParameter("code");

        if (code.equalsIgnoreCase("abcde")){
            if (!userService.existsUsername(username)){//用户名不存在,注册成功
                userService.registUser(new User(null,username,password,email));
                req.getRequestDispatcher("/regist_success.html").forward(req,resp);
            }else {
                //用户名存在
                req.getRequestDispatcher("/regist.html").forward(req,resp);
            }

        }else {
            req.getRequestDispatcher("/regist.html").forward(req,resp);
        }
    }
}

一般把 private UserServiceImpl userService = new UserServiceImpl(); 这样的代码放在方法外面,作为全局变量使用。

一个内部变量只能在函数里使用,也没必要写private
我猜你是把它放错位置了,往外提出一个花括号就好了

通常不建议在这里直接定义 实现类,如果是工具类的话,最好从命名上区分下。

private UserServiceImpl userService = new UserServiceImpl();

如果有对应的接口类,可以参考以下调整

@Autowired
private UserService userService;

局部变量在方法中使用,方法执行完就没用了,所以即便是可以修饰也没有意义。

因为语法就是这么要求的,不允许在方法内部写。

你在方法内部用的话,修饰符用private没意义的,本来局部变量的作用范围就是在这个方法的内部

  1. 是语法规定,方法的变量是局部变量不需要加private
  2. private是用于限制访问作用域的,private修饰的变量,只有当前类可以访问,其他类不能访问;局部变量不可能有其他类来访问,限制作用域没有意义