当你说Object someObject = otherSameObject时会发生什么?

时间:2014-08-20 20:47:14

标签: java swing serialization constructor

我正在使用JTabbedFrame在Java中创建应用程序。每个选项卡都由一个扩展JFrame的单独类创建。我想通过将对象保存到窗口关闭的文件来保存每个选项卡的状态,并在创建选项卡时从文件中读取它们。我知道当你序列化一个对象时,所有的实例变量都被保存了,但是构造函数会发生什么?例如,当我在构建选项卡框架的类中说:

public class Jtab{
    private ClassThatExtendsJFrame tab;

    public Jtab(ClassThatExtendsJFrame tab){  

         this.tab = tab; // what happens here? Is the constructor called?
         JTabbedPane tabs = new JTabbedPane();
         tabs.addTab("name", icon, this.tab, "tooltip");
    }

}    

布局JFrame的所有代码当前都在构造函数中。布局中的所有JLabel和元素都是我在构造函数中指定的类的属性。所以我看到有两个选项可能会发生:调用构造函数并重置所有变量,或者不调用构造函数,并且不创建我的布局。什么是完成我想要做的最好的方法?

3 个答案:

答案 0 :(得分:2)

您永远不能说object = object,因为赋值表达式的左侧不能是“对象”。相反,它是某种类型的参考变量。所以相反,你只能做变量获取赋值对象的引用。或者将变量与另一个变量引用进行比较。

答案 1 :(得分:2)

你说的是

this.tab = tab;

它们是两个不同的参考文献。

this.tab指的是类

的字段

tab指的是构造函数的参数。

因此您将参数引用的引用分配给字段。

答案 2 :(得分:0)

在构造函数中,您将本地字段分配给传递给构造函数的值,其中字段和局部变量具有相同的名称 -

public Jtab(ClassThatExtendsJFrame tab){  
     this.tab = tab; // assign tab from the argument to this instance's field

也可以写成

public Jtab(ClassThatExtendsJFrame that{  
     tab = that; // <-- this.tab

同样,this是为了克服名称冲突。