在PHP开发中,我们经常习惯于在php类中定义很多变量。这是因为php是解析型的语言,在做web开发的时候,一次解析就释放内存。但是Java可能就有些不同,Java是编译型的语言,web容器运行后,类的对象就会常驻在内存中,这个时候如果类的对象中有定义公用变量,那么就会不同的人访问web程序导致这个变量造成冲突。


可以看一个简单的例子:

  1. public int i = 0; //定义一个初始化变量  

  2.  

  3. /**

  4. * 列表

  5. * @return

  6. */  

  7. @RequestMapping(value="/list")  

  8. public ModelAndView list() {  

  9.    ModelAndView modelAndView = new ModelAndView();  

  10.    List<GuestbookDo> lists = guestbookService.findGuestbooks();  

  11.    modelAndView.setViewName("test/list");  

  12.    modelAndView.addObject("userList", lists);  

  13.    this.i++; //i自增  

  14.    System.out.print(i); //控制台输出i  

  15.    return modelAndView;  

  16. }  


我们定义了一个i的变量。常规模式下PHP中,我们在浏览器中请求一下http://127.0.0.1:8090/test/list/地址,则控制台会输出1,然后再请求一次还是1。


但是在Java中,我们可以看到结果:

所以,对于Java来说,i的变量是在内存中常驻的,如果定义在类中,那么就会变成共享变量,如果你的程序中需要用到这个共享变量,那么可能就会造成另外一个人的访问覆盖你这个人的i变量的结果。

那么如果,这个i在方法内呢?方法内是局部变量,方法调用结束就会释放内存,我们还是看下实例:

  1. /**

  2. * 列表

  3. java教程,自学编程,青软培训