日期:2014-05-18  浏览次数:20724 次

JSP一道很基础的问题
<body>
      <%   int   i=1;%>
<%=this.i%>
<%!int   i=0;%>
    </body>

为什么会打印   0   呢....

------解决方案--------------------
LZ~~
你是自己知道,来考别人。
还是不知道,来问别人阿?
------解决方案--------------------
<body>
<% int i=1;%> //这个i是局部变量,生命周期出了 <% %> 就结束了.
<%=this.i%> //这个打印的是全局变量.
<%!int i=0;%> //这个声明的是全局变量,这个i赋值是什么打印的就是什么.如果没有这个全局变量就会报错,这样解释清楚了吗?
</body>
------解决方案--------------------
......
------解决方案--------------------
<% int i=1;%> //这个i是局部变量,生命周期出了 <% %> 就结束了.
------------------------------------
错了,整个页面都可以用的
------解决方案--------------------
<%!int i=0;%>

jsp编译后会生成一个java类文件,观察这个类文件,你会发现,以上面方式定义的i成为这个类的一个成员变量。

而 <% int i=1;%> 中的i确实是一个局部变量,但是在整个jsp中也都可用
------解决方案--------------------
学习中
------解决方案--------------------
能用this么?
------解决方案--------------------
<%! int i=0%> ,是个全局变量,你给赋值0了,所有打印为0啊
------解决方案--------------------
上面的代码写在servlet里是这样的
public class Xxx extends HTTPServlet {
......
int i = 0;
public void doXxx(HttpServletRequest req,
HttpServletResponse res) throws ServletException {
......
int i = 1;
out.println(this.i);
......
}
}
所以打出来的是0
想正确输出1的话
把 <% int i=1;%> 改成 <% i=1;%>
------解决方案--------------------
<%!int i=0;%> 声明成员变量
<%int i=0;%> 声明局部变量