日期:2014-05-17  浏览次数:20891 次

不是成员变量吗?怎么结果不合理?求教。
<%@ page contentType="text/html;charset=GB2312" %> 
<%!  
     int m=100; 
%> 
原值:<%=m%> 
<br> 
<% 
      m=200; 
%> 
现值:<%=m%> 


该网页的执行结果不断刷新结果一直是: 
原值:100 
现值:200 
或者打开其他新的标签页结果仍然是: 
原值:100 
现值:200 
 


按照!的用法结果不应该是如下结果吗? 
原值:200 
现值:200 

求教可能是哪方面的问题? 

------解决方案--------------------
你可以打开jsp文件产生的servlet看下代码。

程序是和普通的java文件一模一样顺序执行的。
------解决方案--------------------
引用:
Quote: 引用:

你可以打开jsp文件产生的servlet看下代码。

程序是和普通的java文件一模一样顺序执行的。

谢谢!您认为结果应该是什么?


你把jsp那部分去掉
就等价于

int m = 100;
print(m);
m = 200;
print(m);


------解决方案--------------------
你这个是在不断地执行三楼 的这段代码,因为你每次都给这个m初始化  值为100
------解决方案--------------------
jsp写的代码,经过Tomcat或别的什么容器编译后,最终是以_youjspname_jsp.java形式出现的,代码基本样式如下:
public final class _youjspname_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

 int n = 0;
  private static java.util.Vector _jspx_dependants;

  public java.util.List getDependants() {
    return _jspx_dependants;
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOExceptionServletException {
    int m = 0;
    ...
  }
}
其中_jspService()是jsp的主体~~

在上面的代码中,有两个变量,全局变量n和局部变量m,其中n就是用<%!int n = 0;%>定义的,m是用<%int m = 0;%>定义的,如果你在<%!%>里面定义一个方法,那么这个方法将是class _youjspname_jsp的一个方法;<%%>是不允许定义方法的,原因很明显:方法里面不允许定义方法!