Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在init和doget之间共享变量?_Java_Jakarta Ee_Servlets - Fatal编程技术网

Java 如何在init和doget之间共享变量?

Java 如何在init和doget之间共享变量?,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,在servlet中,我想在init和doget之间共享一个变量 我想知道我是应该用静态的还是普通的来声明这个变量 (static?) int small; init() { small = 5: } doGet(final HttpServletRequest request, final HttpServletResponse response) { small } 没关系。Javaservlet规范将创建Servlet的单个实例,并调用init一次。无论您将该值

在servlet中,我想在init和doget之间共享一个变量

我想知道我是应该用静态的还是普通的来声明这个变量

(static?) int small;

init()
{
    small = 5:    
}

doGet(final HttpServletRequest request, final HttpServletResponse response) {
    small
}

没关系。Javaservlet规范将创建Servlet的单个实例,并调用init一次。无论您将该值放在静态变量还是非静态变量中,在该servlet上执行doGet请求的所有线程都可以使用该值


我倾向于使用静态,因为它有助于让程序员清楚地知道,所有调用都有一个单一副本,而静态显然不是给定请求的唯一副本。此外,如果您有任何需要,静态代码更容易从代码的其他部分(servlet类本身之外)访问。

这取决于您希望如何更好地设计代码。我建议使用非静态,因为考虑通过多个子类扩展这个类

将其作为成员变量将允许您对不同的子类具有不同的值。然而,你不能

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

是否希望
small
在servlet的所有用户之间共享?或者您希望每个请求都有一个
small
的实例吗?我想确保我理解这两种情况servlet规范说明在第一个请求之前调用
init
方法。servlet的同一实例在所有请求中共享。除非您在web.xml中多次声明了servlet,否则变量是否为static不会有什么区别