初学JSP,说一下自己对jsp两种声明变量<%! %>和<% %>的理解,如果有不对的地方,请指正。
先看代码,简单的投票统计页面:
<%@ page contentType="text/html;charset=GB2312"%>
无标题文档
<%
String cost =request.getParameter("cost");
int vote[] = new int [3];
synchronized(vote){
if(cost!=null){
if(cost.compareTo("0")==0)
vote[0]++;
if(cost.compareTo("1")==0)
vote[1]++;
if(cost.compareTo("2")==0)
vote[2]++;
}
}
%>
投票结果:
候选人A:<%=vote[0]%>
候选人B:<%=vote[1]%>
候选人C:<%=vote[2]%>
声明 int vote [] =new int [3] 在<% %>内,重复点击投票按钮,候选人票数不会增长。
<%@ page contentType="text/html;charset=GB2312"%>
无标题文档
<%! int vote[] = new int [3];%>
<%
String cost =request.getParameter("cost");
synchronized(vote){
if(cost!=null){
if(cost.compareTo("0")==0)
vote[0]++;
if(cost.compareTo("1")==0)
vote[1]++;
if(cost.compareTo("2")==0)
vote[2]++;
}
}
%>
投票结果:
候选人A:<%=vote[0]%>
候选人B:<%=vote[1]%>
候选人C:<%=vote[2]%>
声明<%! int vote[] = new int [3];%>在<%! %>内,重复点击投票按钮,候选人票数会加1.
通过执行对比,发现声明在<%! %>内的变量,最后会被编译成java类里的一个成员变量,也就是全局变量,而声明在<% %>内的变量,会被编译成Java类成员方法里的一个变量。
在执行第一段代码时,每按一次投票按钮,重新执行一遍
<%
String cost =request.getParameter("cost");
int vote[] = new int [3];
synchronized(vote){
if(cost!=null){
if(cost.compareTo("0")==0)
vote[0]++;
if(cost.compareTo("1")==0)
vote[1]++;
if(cost.compareTo("2")==0)
vote[2]++;
}
}
%>
重新为vote分配空间,统计票数。而执行第二段代码,声明在
<%! %>内的成员变量在执行成员方法后,通过vote++,则会不断累加。