【问题标题】:Java gui and constructorJava gui和构造函数
【发布时间】:2015-05-31 12:35:06
【问题描述】:

我对java和gui有一个疑问,这已经困扰了我一段时间了。下面我发布了一个小代码,我需要你看看它的构造函数部分。

import java.awt.*;  

class First extends Frame {  

    First(){
        Button b=new Button("click me");  
        b.setBounds(30,100,80,30);// setting button position
        add(b);//adding button into frame  
        setSize(300,300);//frame size 300 width and 300 height  
        setLayout(null);//no layout manager  
        setVisible(true);//now frame will be visible, by default not visible  
    }  

    public static void main(String args[]){  
        First f=new First();  
    }
}

我知道在 main 方法中,我们创建了一个“First”类的对象。我也明白,当一个新对象被创建时,它的类的构造函数会被调用来进行初始化。

我的疑问是我们如何在没有点运算符的情况下使用 setSize、setLayout、setVisible 函数?如果这些函数是要修改对象,创建它会触发构造函数调用,我们不应该使用 this 指针吗?这不就是我们一直这样做的方式吗?但是我在整个互联网上都遇到过类似的代码,最近真的很困惑。任何帮助将不胜感激。

【问题讨论】:

  • 这是隐含的,当然如果你想使用“this”你可以,但你只是增加了更多的输入,而且,正如许多没有使用过 ObjectiveC 的人抱怨的那样,Java 是相当冗长。另外,不要使用空布局...

标签: java user-interface constructor awt frame


【解决方案1】:

setSizesetLayoutsetVisible 方法可以直接使用,因为它们是Frame 类的成员,而您的Firstclass 是Frame 的子类。

从这个意义上说,您正在“内部”工作 Frame 对象,因此可以直接调用其成员。

您只需要限定来自对象外部的方法调用,以便 Java 可以判断您正在调用哪个对象。

可以使用this 显式调用这些方法,即 this.setSize(),但假设this,因此您可以编写更简洁的代码。并非所有语言都这样做 - 例如在 Python 中,您始终需要指定 this(在 Python 中称为 self

【讨论】:

  • 嘿 DNA,还有一个小疑问。当我们创建“First”类的对象时,基类的构造函数被调用,这意味着 frame() 构造函数被调用并且框架是创建。然后,派生类构造函数被调用,进一步调用 setSize 和其他函数来修改这个框架。会发生什么情况?如果我错了,请纠正我。我是一个初学者,想把我的基础知识弄好 :)
  • 是的,没错 - 我建议您通过创建自己的类和子类并在构造函数中打印一些内容来尝试一下,这样您就可以看到发生了什么。
【解决方案2】:

您发布的代码包含对 setSize()、setLayout() 等方法的引用,这些方法继承自 Frame 类,并且始终可用于当前执行的对象。

在 java 中没有像 C 或 C++ 中那样的显式指针的概念。但是有 this 关键字是指当前对象。

因此,此关键字的使用是可选的,

setSize(300,300);

this.setSize(300,300);

两者的意思相同。

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 2013-07-30
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多