Java - 我们可以在构造函数中声明对象变量吗?

时间:2015-04-29 07:02:12

标签: java constructor

在创建对象时,我们可以在constructor中声明和初始化对象变量吗?

我正在创建一个基于XML的对象。 XML格式是以前系统的输出,是动态的。

因此,对象变量基于元素。如果我在构造函数中声明变量会更好。

在下面的代码中我们可以将temp声明为对象变量。

例如:

public class A
{
    public A()
    {
        HashMap<String, Object> temp = new HashMap<String, Object>;
    }
}

我找不到这种意识形态的示例代码 有什么建议吗?

5 个答案:

答案 0 :(得分:1)

如果在构造函数中声明它,它将是构造函数的本地,这意味着它不会非常有用。但是,如果只需要在构造函数中使用此变量,则可以执行此操作。

答案 1 :(得分:1)

你可以在构造函数中声明变量,但是它的范围将仅限于那个构造函数。相反,你可以做到

$('iframe').load(function () {
    var $newText = $('iframe').contents().find(".newtext");
    $newText.replaceWith( $newText.text() )
});

在构造函数之外声明它并在构造函数中初始化它,它可以在类的任何方法中访问,因为它的范围现在是全局的。

答案 2 :(得分:1)

是的,你可以。

但可见性范围仅限于构造函数。

您只能访问echo "<input type='button' value='Add' OnClick='CreatePopup();'/>"; 到构造函数(仅从temp{):

}

如果您想稍后使用此地图(对象等),它将不是最佳解决方案。

但是如果你只需要在构造函数中使用它就可以了。

如果您将在构造函数之外使用此映射:

public class A { 

  public A() {
      Map<String, Object> temp = new HashMap<String, Object>;        
  } // end scope of visibility for `temp`

<强> 顺便说一句
好的做法是使用界面参考:

  

Map temp = new HashMap;

而不是:

  

HashMap temp = new HashMap;

此处有更多信息:Type List vs type ArrayList in Java

答案 3 :(得分:1)

我认为你正在寻找一些不同的东西。

public class A {
   // Constructor
   private A() {
   }

   public static A createObjectA(...) {
      A result = new A();
      // In here transform the XML in a suitable format and set it into the result object.
      // Return the result
      return result;
   }
}

我们来看看上面的代码。你有一个可以在类中调用的构造函数,所以你确定没有人会以错误的方式使用它。

然后你有一个静态函数,为你提供一个Object A的实例,你将通过这个来创建A的每个实例:

A newObj = A.createObjectA(...);

您可以添加任意数量的静态函数来分配与您拥有的各种输入格式的数量相匹配的对象,这种方法的优点是您的结果对象将没有解析先前输入的逻辑。

Ofc你可以将静态函数放在另一个类中,但是你必须使构造函数可调用(你通常用C ++中的朋友函数做的)。

答案 4 :(得分:0)

构造函数的行为与任何其他代码块(例如,方法或匿名块)相同。你可以声明你想要的任何变量,但它的范围将仅限于构造函数本身。

听起来好像你需要将一些集合或map声明为数据成员,并让构造函数动态填充其值。