定义由类的不同方法使用的变量和类的最有效方法是啥?

Posted

技术标签:

【中文标题】定义由类的不同方法使用的变量和类的最有效方法是啥?【英文标题】:Whats the most efficient way to define a variable and a class that are used by different methods of a class?定义由类的不同方法使用的变量和类的最有效方法是什么? 【发布时间】:2013-12-12 20:42:06 【问题描述】:

关于高效内存使用,我有几个问题。我有一个表格,将提交以接收项目列表作为结果。一旦提交表单,其字段将由请求变量接收,并由模型类的submitRequest 方法处理。

问题是我应该在哪里为请求变量 (Request request = new Request) 分配内存?在构造函数中?或者根本不分配它,因为它现在可以工作?

第二个问题是我应该在哪里创建Model 类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个对象?

public class MyClass

  private Request request;
  private List<result> results;
//private formModel myModel = new formModel();

  public MyClass()
  

  public String myForm()
   formModel myModel = new formModel(); 
   this.results = myModel.submitRequest(request); //process request and return results
   return "SUCCESS";
  
  .......

【问题讨论】:

【参考方案1】:

我应该在哪里为请求变量分配内存(请求请求 = 新请求)?在构造函数中?还是像现在这样完全不分配?

您可以在代码中的任何位置执行此操作,在构造函数中、内联、惰性、通过容器、使用其他 DI 框架、使用 Struts 类型转换、拦截器等。您应该遵循 Java Bean 约定。

我应该在哪里创建 Model 类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个对象?

第二个问题是针对动作类对象的线程安全性。在以前的 Struts 主要版本中,用户 bean 作为参数传递给操作方法以实现线程安全,因为操作类不是。

在当前版本的 Struts 中,动作类是线程安全的,因为动作类的新实例是在每次动作调用时创建的。您可以在操作类中为Model 创建一个属性,该属性可以由不同的方法使用。在这种情况下,您可以定义正在使用的对象的范围。

【讨论】:

谢谢,我不明白你所说的“除非它们不是不同的动作”是什么意思,你所说的“应该定义正在使用的对象的范围”是什么意思 formModel 是一个有方法的类访问数据库,因为大多数方法都将使用此需求,我应该将其设置为“私有 formModel myModel = new formModel();”吗?或者在每个类中定义它? , results 是 JSP 用来显示结果的,我把它作为一个字段供 JSP 访问。对不起,我的英语很弱。 在简单的情况下是的,初始化内联。范围将default 作为操作范围。有关 struts 容器中可用范围的更多信息,请参阅 bean 配置。 this 的问题可能会对您有所帮助。【参考方案2】:

我应该在哪里为请求变量分配内存(请求请求 = 新请求)?在构造函数中?或者根本不分配它,因为它现在可以工作?

实际上这应该不是问题,因为 Java 关心所有的内存。声明变量时可以对其进行初始化。在这种情况下,不可能得到NullPointerException,因为变量应该已经初始化了。

当然,当您这样做时,您会在创建对象时初始化所有变量。但同样,这不应该是性能问题。

我应该在哪里创建 Model 类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个对象?

关于模型实例,这取决于。如果您想通过多个方法共享一个对象,最好创建一个私有类变量。

否则,如果您只想在其中一种方法中使用模型实例,那么您应该只在该方法中创建变量。

【讨论】:

以上是关于定义由类的不同方法使用的变量和类的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

JSP变量方法和类的声明,JSP程序片,JSP表达式

python基础-面向对象

java接口和类的区别在那里.

记录文件、类和构造函数的正确方法是啥?

review07

java接口和类有啥区别?