在servlet中,我想在init和doget之间共享一个变量
我想知道我是否应该使用静态或正常
声明此变量(static?) int small;
init()
{
small = 5:
}
doGet(final HttpServletRequest request, final HttpServletResponse response) {
small
}
答案 0 :(得分:0)
没关系。 Java Servlet规范将创建servlet的单个实例,并调用init一次。无论是将值放在静态还是非静态变量中,它都可用于在该servlet上执行doGet请求的所有线程。
我倾向于使用静态,因为它有助于使程序员清楚所有调用都有一个副本,而静态显然不是给定请求的唯一。此外,如果您有任何需要,静态更容易从代码的其他部分(在servlet类本身之外)访问。
答案 1 :(得分:0)
这取决于您希望如何更好地设计代码。我建议使用非静态的,因为考虑通过多个子类来扩展这个类。
将其作为成员变量将允许您为不同的子类具有不同的值。然而,静止你不能。
public class Superclass {
protected static String sVariable = "static";
protected String mVariable = "static";
public void init () {
}
public void print(){
System.out.println(this.getClass().getName() + ":sVariable" + sVariable);
System.out.println(this.getClass().getName() + ":mVariable" + mVariable);
}
}
public class SubClass extends Superclass {
public void init () {
sVariable = "subClassSVariable";
mVariable = "subClassMVariable";
}
public static void main(String a[]){
Superclass superC = new Superclass();
SubClass subC = new SubClass();
superC.init();
subC.init();
superC.print();
subC.print();
}
}
上述代码的输出为:
com.ramesh.Superclass:sVariablesubClassSVariable
com.ramesh.Superclass:mVariablestatic
com.ramesh.SubClass:sVariablesubClassSVariable
com.ramesh.SubClass:mVariablesubClassMVariable