我可以通过将成员指针传递给方法并在方法中分配它来初始化它吗?

时间:2015-01-26 21:23:58

标签: java initialization

我有一个JFrame和一堆JTextFormattedField字段。每个JTextFormattedField的初始化都是相同的,所以我想要为每个JTextFormattedField调用一个私有方法。这就是我试图做的事情:

JFrame初始化:

myJFrame.getContentPane().add(addCharTextField(m_textField1, new textFieldFocusListener()), "cell 3 1 2 1,growx");
myJFrame.getContentPane().add(addCharTextField(m_textField2, new textFieldFocusListener()), "cell 3 2 2 1,growx");
myJFrame.getContentPane().add(addCharTextField(m_textField3, new textFieldFocusListener()), "cell 3 3 2 1,growx");

文本字段初始化方法:

private JFormattedTextField addCharTextField (JFormattedTextField textField, FocusAdapter focusListener) {
    textField = new JFormattedTextField();
    textField.addFocusListener(focusListener);
    textField.setEditable(false);
    textField.setColumns(10);
    return textField;
}

我认为在传递给另一个方法后分配成员变量可能会有问题。稍后在我的程序中,当我尝试访问m_textField1时,我得到一个NullPointerException。垃圾收集器是否会删除JFormattedTextField末尾的addCharTextField?除了在JFormattedTextField初始化例程中重新分配JFrame之外,还有办法解决这个问题吗?即使仅仅出于审美目的,我真的希望JFrame初始化方法中每个成员变量的初始化只占用一行代码。

编辑以回答此问题被视为重复:我的问题是:“垃圾收集器是否删除JFormattedTextField末尾的addCharTextField?” (答案是肯定的)并且“除了在JFormattedTextField初始化例程中重新分配JFrame之外,还有办法解决这个问题吗?” (再次肯定,但丑陋)。在另一个问题中所选择的答案是这个被认为是重复的答案并不回答其中任何一个。现在,在深入研究其他一些答案并阅读这里的评论之后,我终于能够将Java中发生的事情拼凑起来了。但这不会使这个问题重复。

对于它的价值,问题是C ++'new'和Java'new'的根本区别让我感到困惑。考虑到Java从C ++中借用了多少其他语法而没有大的使用差异,我花了一些时间来围绕“新”用法之间的差异。

1 个答案:

答案 0 :(得分:2)

没有。 Java是按值传递的。您对传递的参数所做的更改不会应用于原始参数。