越详细越好

tjzero_sapce 2008-07-19 01:06:52
<HTML>
<BODY>
<%!int x=7;%>
<%int x=5;%>
x=<%=x%>,<%=this.x%>
</BODY>
</HTML>
a) x=7,5
b) x=7,7
c) x=5,7
d) x=5,5

答案是C 我不明白为什么是C,谁能解释下啊? 越详细越好
...全文
106 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZangXT 2008-07-19
  • 打赏
  • 举报
回复
比如你写一个test.jsp文件,经过tomcat解析之后生成这样一个java文件

public final class test_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {

int x=7;
……
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
……
int x=5;
……
out.write("x= ");
out.print(x);
out.write(',');
out.write(' ');
out.print(this.x);
out.write("\n");
}
……
}

自己可以做个实验分析一下。
ZangXT 2008-07-19
  • 打赏
  • 举报
回复
<%!int x=7;%>
这句话定义的变量是类中的成员变量,jsp文件经过解析之后得到一个对应的类,<%!int x=7;%> 定义了这个类中的变量int x=7;
而你通过<%int x=5;%> 定义的变量是方法jsp对应的Class中 _jspService()方法中定义的一个临时变量x,执行输出是在
_jspService()方法中进行的,所以x访问到的是x=5;这个x,成员变量x被它屏蔽了。而通过this.x访问的是x=7这个变量。
lovingprince 2008-07-19
  • 打赏
  • 举报
回复
<%!int x=7;%> //这个是全局变量,也就是servlet的一个属性
<%int x=5;%> //这个是方法的局部变量,在方法中定义

因此
<%=x%>//这个输出是在方法中输出局部变量的值
, <%=this.x%> //这个输出属性的值。

所以第一个输出局部变量值5,第二个this.x输出全局变量值7.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧