【发布时间】:2011-02-12 09:28:00
【问题描述】:
我有这个构造函数;
public UmlDiagramEntity(ReportElement reportElement, int pageIndex, Controller controller) {
super(reportElement.getX1(), reportElement.getY1(), reportElement.getX2(), reportElement.getY2());
setLayout(null);
this.pageIndex = pageIndex;
this.controller = controller;
reportElements = reportElement.getInternalReportElements();
components = new ArrayList<AbstractEntity>();
changedComponentIndex = -1;
PageListener p = new PageListener();
this.addMouseMotionListener(p);
this.addMouseListener(p);
setPage();
}
而且我在同一个类中有一个更新方法;
@Override
public void update(ReportElement reportElement) {
if (changedComponentIndex == -1) {
super.update(reportElement);
} else {
reportElements = reportElement.getInternalReportElements();
if (components.size() == reportElements.size()) {
if (!isCommitted) {
if (reportElement.getType() == ReportElementType.UmlRelation) {
if (checkInvolvementAndSet(changedComponentIndex)) {
anchorEntity(changedComponentIndex);
} else {
resistChanges(changedComponentIndex);
}
return;
}
}
..................goes on
当我遵循调试器的流程时,我看到当调用 update 时,在方法的某处,程序进入构造函数并重新执行它(super、pageIndex 等)。为什么它会去构造函数 :D 我没有告诉它去那里。
如果你愿意,我可以进行更深入的分析,看看它去哪里构造函数。顺便说一句,changedComponentIndex 是一个静态变量。
【问题讨论】:
-
你能显示一下它何时再次进入构造函数的堆栈跟踪吗?
-
“如果你愿意,我可以做一个更深入的分析,看看它去哪里构造函数。”我认为这可能会帮助您回答自己的问题...
-
哦,对不起,我现在才知道,这可能不是一个不寻常的电话,而是我的错误。
-
@thomas 确实做到了:)
标签: java constructor methods call static-variables