jsp两种声明变量和的区别

初学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]%>

投票

候选人A
候选人B
候选人C
声明 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]%>

投票

候选人A
候选人B
候选人C
声明<%! 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++,则会不断累加。



你可能感兴趣的:(学习积累_Java相关)