我正在使用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和元素都是我在构造函数中指定的类的属性。所以我看到有两个选项可能会发生:调用构造函数并重置所有变量,或者不调用构造函数,并且不创建我的布局。什么是完成我想要做的最好的方法?
答案 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
是为了克服名称冲突。