其实你换种方式看,jsp最终会转译成servelt
你说的那全局变量就是那类的成员变量 作用域:为整个类
而后者则是在方法 doget 或 dopost方法里,作用域为,某个方法
jsp中的局部和全局变量定义方法:
全局变量的定义方法:<%! 变量类型 变量名%>
如,定义一个int型的全局变量a写法如下:
<%! int a;%>
局部变量定义方法:<% 变量类型 变量名%>
如,定义一个String型的局部变量b写法如下:
<% String sign = "1";%>
session是客户端的作用域,page是某个页面的作用域 ,application是服务器端整个应用程序的作用域。 <%! %>跟page一样 <% %>是jsp程序块作用域 。
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
局部变量也只有局部作用域,他是自动对象,他在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用结束后,变量就被撤销,其所占用的内存也被收回。
从分配内存空间看:
全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间。
TIPS:
1、若全局变量仅在单个文件中访问,则可以讲这个变量修改为静态全局变量。
2、若全局变量仅在单个函数中使用,则可以将这个变量修改为该函数的静态局部变量。
3、全局变量、静态局部变量、静态全局变量都存放在静态数据存储区。
4、函数中必须要使用static变量的情况:当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。