这些构造函数调用语句之间的区别?

时间:2014-02-07 06:48:41

标签: java swing jframe

public class StudentFormMain {  
    public static void main(String[] args) {
        new StudentForm();
    }
}

和2ND班级

public class StudentForm extends JFrame {
    public StudentForm(){
        setTitle("Admission Form");
        setSize(300,250);
        setVisible(true);   
    }
}

我的问题是

这些陈述之间有什么区别

StudentForm studentform=new StudentForm();

new StudentForm()

First Statement声明该类的Obj并调用构造函数,但在Second语句中只有构造函数正在调用。

注意:结果相同

super(""); set the title of the frame

因为它正在调用超类构造函数。 我们也可以使用setTitle("")方法

设置标题

请区分这些方法。

5 个答案:

答案 0 :(得分:1)

new StudentForm();

上面的变化只是一个构造函数。

StudentForm studentform=new StudentForm();

如果要访问除类中构造函数之外的其他方法,则使用上面的变体。在这两种情况下,无论您是否使用studentform对象,都将调用构造函数。

例如,如果您的类具有其他名为methodOne()的方法:

public class StudentForm extends JFrame {
    public StudentForm(){
        setTitle("Admission Form");
        setSize(300,250);
        setVisible(true);   
    }
    public void methodOne()
    {
         System.out.println("In method one..");
    }
}

然后你可以使用:

来调用它
StudentForm studentform=new StudentForm();
studentform.methodOne();

答案 1 :(得分:1)

new关键字表示instantiation/creation对象的StudentForm。所以

new StudentForm()

为您提供StudentForm或仅StudentForm对象的实例。

之间的唯一区别
StudentForm studentform = new StudentForm();

and 

new StudentForm();

前者为新reference对象提供了StudentForm。引用为studentForm

答案 2 :(得分:1)

代码:

StudentForm studentform = new StudentForm();

构造一个新的StudentForm实例,并将该实例的引用分配给变量studentform。这样您就可以稍后调用StudentForm实例的方法,例如studentform.addContainerListener(xxx)

但代码new StudentForm()只是调用构造函数来创建一个新的对象实例,但不要保留对该实例的引用。

答案 3 :(得分:1)

StudentForm studentform=new StudentForm();

您正在创建一个StudentForm类型的Object,并将其分配给名为studentform的引用(使用camelCase,即studentForm而不是studentform for fields)。现在,您可以使用studentForm来调用对象的某些方法/访问字段。

eg: studentForm.toString()

如果您没有得到对象的引用,则无法对该对象的非静态方法进行校准。

答案 4 :(得分:1)

您的First语句包含已创建实例的引用,第二个语句没有对已创建对象的引用。除此之外,没有区别。