为什么我们在构造函数中启动对象

时间:2013-09-10 07:48:15

标签: java class constructor

为什么我们在构造函数和外部实例化一些对象。这样做有哪些优点/缺点。

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);
}

7 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

在构造函数中启动某些变量的目的是在创建对象时分配值。这样你就不必隐含地赋予价值。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

  1. 某些对象需要初始化很少的字段才能在使用之前正确构造该对象。在创建对象时调用构造函数,因此它在构造函数中初始化。
  2. 对于不同的场景,您可以使用不同的初始化重载构造函数。
  3. 您始终可以使用名为initializeValues的方法,并在创建对象后调用它,而不是将其放在构造函数中。
  4. 将它放在构造函数中将确保在创建对象时始终调用它。
  5. 在派生类构造函数之前总是调用超类构造函数,因此它是有意义的。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

一个类可能包含多个构造函数,这些构造函数可能表现不同并实例化不同的字段并保持其他字段不变(例如,当一个类有多个目的时,实际上可能表示设计不良)。

此外,如果某个类没有默认构造函数=&gt;在反序列化时,没有构造函数被调用。

答案 6 :(得分:0)

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

因此,如果 home_ORobj = new HomePage_OR(); 不需要初始化PageFactory元素,那么你可以将它从构造函数中写出来,即全局。