1

抱歉,如果标题措辞不好,请随时编辑。

让我们假设一个主类,它从类 A 创建一个对象,其构造函数从类 B 接收一个对象作为参数。一种编码方法是:

B b = new B(); A a = new A(b);

这将产生以下 UML 序列图: 默认顺序

但是现在,假设我想以另一种方式对其进行编码,以免保留对 B 对象的引用(使其匿名),如下所示:

A a = new A(new B());

它会产生以下哪个 UML 序列图?

第一个选项(不改变整体操作顺序):第一的

第二种选择(更改顺序):第二

换句话说,B 对象是由 Main 类创建还是由 A 的构造函数创建?

4

2 回答 2

1

你的第一个选项是正确的。内部对象B是在main. 现在A已创建并且(匿名)B对象作为参数传递。

第二个选项意味着它B是在内部创建A的,但事实并非如此。

于 2020-03-11T14:41:35.260 回答
1

我用调试器运行了一个简单的程序来观察新的 B 对象何时被创建。它是在调用 a 的构造函数之前创建的。因此,主类正在创建它,然后将其传递给构造函数以创建一个。

A类:

public class A()
{
    public A(B b)
    {
        //constructor stuff
    }  
}

B类:

public class B()
{
    public B()
    {
        //constructor stuff
    }
}

主要的

public class App()
{
    public static void main(String[] args)
    {
        A a = new A(new B());
    }
}
于 2020-03-11T13:49:45.457 回答