为什么默认情况下不调用构造函数

时间:2012-11-30 06:38:11

标签: java constructor

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

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

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

6 个答案:

答案 0 :(得分:4)

您尚未创建Anther个对象。只有在创建对象时才会调用构造函数。

无需装箱对象即可访问

static个资源。

答案 1 :(得分:4)

  

我听说我的讲师说在Java中调用了构造函数   什么时候主要开始。

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

现在,事情就是这样: -

  

在使用new运算符

实例化类之前,不会调用构造函数

因此,在上面的例子中,当您使用以下代码时将调用构造函数: -

Anther obj = new Anther();

在您的main方法中。

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

与你的讲师一起澄清这件事。

答案 2 :(得分:0)

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

Anther ant = new Anther();

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

答案 3 :(得分: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");     
    }

答案 4 :(得分:0)

- 当您创建类的对象时,始终会调用其构造函数

- 不仅 contructor,还要调用超类构造函数,直到调用Object Class构造函数。 < / p>

- object 形成从Super class流向Sub class。

- 您必须调用创建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");     
    }

答案 5 :(得分:0)

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

我,e

Anther obj  = new Anther();

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

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

super constructor在此示例中超出范围,因为此Anther类[Class A extends Class B]

有基类,因此调用它

希望这能清除你的怀疑。

谢谢, 帕