0

为什么我们在构造函数内部实例化一些对象而在外部实例化一些对象。这样做的优点/缺点是什么。

public class HomePage_Util {
private Common_Functions cfObj = new Common_Functions();
HomePage_OR home_ORobj;
Logging logObj = new Logger();
public static String scptName;
public ArrayList<String> homeScriptMsgList = new ArrayList<String>();

public HomePage_Util(WebDriver driver) {
    home_ORobj = new HomePage_OR();
    PageFactory.initElements(driver, home_ORobj);
}
4

7 回答 7

0

构造函数基本上是用于创建一个new object of a class. 创建对象时,会创建并分配该对象的所有变量的副本default value

在构造函数中初始化一些变量的目的是在创建对象时为其赋值。这样您就不必隐式赋值。

于 2013-09-10T07:53:29.983 回答
0

我的猜测是此类代码的编写者不确定 home_ORobj 是否会在调用 initElements() 之前被初始化,但外部的那些首先被初始化所以没关系。

尽管如果它们相互依赖(即在构造函数的参数中使用另一个),最好将它们放在构造函数中,因为代码格式化程序可能会重新排序破坏代码的元素列表。

于 2013-09-10T07:53:31.477 回答
0

一个优点是避免使用静态块来初始化静态成员。AFAIK在对象的生命周期中并不完全相同:构造函数在第一次初始化之后执行。

于 2013-09-10T07:55:50.070 回答
0

代码重用是在构造函数中初始化元素的主要优点。此外,只有在创建对象或调用构造函数时,初始化一些东西才有意义。

于 2013-09-10T07:49:21.573 回答
0
  1. 一些对象需要初始化几个字段,以便在使用之前正确构造该对象。在创建对象时调用构造函数,因此它在构造函数中初始化。
  2. 对于不同的场景,您可以使用不同的初始化来重载构造函数。
  3. 您始终可以拥有一个名为 initializeValues 的方法,并在创建对象后调用它,而不是将其放入构造函数中。
  4. 将它放在构造函数中将确保在创建对象时始终调用它。
  5. 超类构造函数总是在派生类构造函数之前调用,所以它是有意义的。
于 2013-09-10T07:55:11.100 回答
0

在构造函数之外启动的实例字段在创建新对象时始终是最初的方式 - 对于每个实例。在构造函数中启动的那些可能对新实例具有某些特殊含义,例如您示例中的 WebDriver 似乎具有,因此它不能在其他地方启动。需要将某种类型的实例作为参数传递的构造函数确实强制设计,因为它不能传递任何其他东西,并且没有它就无法构造。

一个类可能包含多个构造函数,这些构造函数的行为可能不同并实例化不同的字段,而其他字段则保持不变(例如,当一个类有多个用途时,这实际上可能表明设计不佳)。

此外,如果一个类没有默认构造函数 => 在反序列化时不会调用构造函数。

于 2013-09-10T08:00:48.443 回答
0

只有在需要初始化序列中的其他对象时,才会在构造函数中初始化对象。就像在你的例子中首先是对象,即home_ORobj = new HomePage_OR(); 将被创建,因为在下一步初始化 PageFactory 元素时需要此对象。

所以如果home_ORobj = new HomePage_OR(); 不需要初始化 PageFactory 元素,那么您可以将其写出构造函数,即全局。

于 2013-09-10T08:04:36.583 回答