java全局变量清空?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java全局变量清空?相关的知识,希望对你有一定的参考价值。

controller层每次访问,StringBuffer里面的数据都累加,怎么改都不对.求助

其实在java中是没有真正的全局变量的,因为一个java程序其实就是由多个类方法堆积起来的,而每个类、方法中的变量实际上都是属于它自己的“全局变量”,相对于其他类、方法来说这些变量就成了局部变量(因为他们可能不能调用)。
简单的说就是在针对一个main方法中,所有的类方法都能调用的变量,就是全局变量(即它的作用域是整个程序)。
总的来说,全局变量,局部变量都只是个相对概念,要靠自己在写程序的过程中去慢慢体会理解。追问

那这个例子前台固定需要以下格式:java\\JAVA基础\\30天搞定 的数据,请问要怎么改进,不考虑性能,判断的情况.

参考技术A 看你的项目的结构是怎样的,如果所有的ACTION都是交给SPRING来管理的,那就容易了,只要在<bean id="" class="action" scope="prototype"/>
加入scope的配置就可以了
如果是Struts2自己管理的话应该不会有这个问题 我记得Struts2本身就是多例的
如果是Struts1.2 那就不应该在Action里有全局变量,而应该在Form里

补充:
SpringMVC 控制器同样不应该使用多例的 如果非要如此@Scope("prototype")应该是可以的,但应该把控制器和model层分开,这跟Struts2是不同的。
参考技术B 你可以用messageTest.delete(0, messageTest.length()-1)追问

前台要的数据需要固定格式: java\\JAVA基础\\30天搞定 但第一次请求接收正确是:java\\JAVA基础\\30天搞定

第二次请求是:java\\JAVA基础\\30天搞定\\java\\JAVA基础\\30天搞定

依次累加,所以搞不定
你这种说法我用过了.报错的.

参考技术C spring中bean默认是单实例的,也就是你访问无数次,都是同一个实例在给你提供服务,不会再初始化新对象,所以你这个StringBuffer是没有重新初始化过得,跟实例是绑定的,每次访问都只是更新了值;

建议你修改下getList方法 写个公共的,带个私有的,把递归的逻辑写成私有方法,供公有调用,StringBuffer在方法体内部声明
public String getList(String id)
StringBuffer sb = new StringBuffer("");
getListDG(id, sb);
String str = sb.toString();
....

private void getListDG(String id, StringBuffer sb)
递归那一套逻辑
if(!parentid.equals("0"))
getListDG(parentid,sb);

以上是关于java全局变量清空?的主要内容,如果未能解决你的问题,请参考以下文章

java的全局变量都有哪些作用?

labview全局变量刷新慢咋办

python1-集合函数-(全局变量与局部变量)

实例变量,局部变量,全局变量,静态全局变量

javaAndroid开发,如何定义全局变量?

java之static变量与全局局部变量的区别