-4

我听我的讲师说,在 Java 中,构造函数在 main 实际启动时被调用。但是当我尝试它时,我知道构造函数不会自动调用。代码是这样的。

class Anther {

    static void method1(){
        System.out.println("this is method");
    }

    static void method2(){
        System.out.println("this is second one");
    }

    Anther(){
        System.out.println("Anther class");
    }
    public static void main(String[] args){
        System.out.println("first line");

        method1();
        System.out.println("second line");

        method2();
        System.out.println("end of story");     
    }
}

输出是这样的

first line
this is method
second line
this is second one
end of story

为什么它没有打印“花药类”。

4

6 回答 6

4

您尚未创建Anther对象。构造函数仅在对象创建时被调用。

static无需创建对象即可访问资源。

于 2012-11-30T06:39:38.277 回答
4

我听我的讲师说,在 Java 中,构造函数在 main 实际启动时被调用。

我怀疑你的讲师真的会这么说。如果他有,那么他肯定可能在某个地方弄错了,或者你可能误解了他

现在,事情是这样的:-

new在您使用运算符实例化您的类之前,不会调用构造函数

因此,在上述情况下,构造函数将在您使用以下代码时被调用:-

Anther obj = new Anther();

在你的main方法中。

在上面的语句中,new操作符创建了一个 的对象Anther,并在新创建的实例上调用构造函数来初始化它的状态。

一定要和你的讲师澄清这件事。

于 2012-11-30T06:40:54.157 回答
0

默认情况下,只有当我们有类对象的实例时才会调用构造函数。

IE

Anther obj  = new Anther();

所以,这就是为什么default没有调用构造函数的原因。

static methodsJVM是在调用构造函数之前加载的类变量。

super constructor在这个例子中超出了范围,它被调用是因为这个 Anther 类有基类[Class A extends Class B]

希望这能消除您的疑问。

谢谢,帕万

于 2012-11-30T06:49:38.457 回答
0

-当你创建一个类的对象时总是调用它的构造函数

-不仅是它的 contructor,而且是它的超类构造函数,直到 Object Class 构造函数被调用。

-以及从超类到子类的流程的形成。object

-你必须调用创建一个Anther class 实例,以便调用它的构造函数。

例如:

public static void main(String[] args){

        Anther a = new Anther();     // Creation of an object of class Anther

        System.out.println("first line");

        method1();
        System.out.println("second line");

        method2();
        System.out.println("end of story");     
    }
于 2012-11-30T06:43:56.557 回答
0

创建Instance类时会自动调用构造函数。

Anther ant = new Anther();

在这里,您正在创建类的实例。此时将调用构造函数。

于 2012-11-30T06:40:18.417 回答
0

尝试这个

public static void main(String[] args){
        Anther a = new Anther();//you shoule create instance;
        System.out.println("first line");

        method1();
        System.out.println("second line");

        method2();
        System.out.println("end of story");     
    }
于 2012-11-30T06:42:20.333 回答