我们可以在不创建其对象的情况下调用构造函数

时间:2017-02-14 10:05:40

标签: java constructor

此代码中发生了什么?我想将输出显示为"打印数据ASD"不调用构造函数。

儿童班:

package com.javatraining;

public class test1 extends test2{

    public static void main(String[] args) {
        disp();
    }
}

父类:

package com.javatraining;

public class test2
{
    public static String name;  

    public test2(){
        name="ASD";
    }

    public static void disp(){
        //test2 t=new test2();
        System.out.println("Printing data "+name);
    }
}

4 个答案:

答案 0 :(得分:1)

为test 2类的name对象赋值。它会起作用。

public static void main(String[] args) {
        test2.name = "ASD";
        disp();
    }

答案 1 :(得分:0)

即可。如果不创建对象,则无法调用构造函数 除非您通过test2 = new test2();创建test2的对象,否则您将获得null名称。

如果它是静态的,你可以调用构造函数的唯一方法,但是constructors in Java can't be static.所以你创建了一个对象来调用构造函数。

答案 2 :(得分:0)

public class MainJava extends Test{

    public static void main(String[] args){
        //Option 1
        disp();

        //Option 2
        name = "ABCD";
        disp();

        //Option 3
        new Test();
        disp();
    }

    }

    class Test {
    public static String name = "TEMP";

    public Test() {
        // Will not get called. Unless you create Object
        name = "ASD";
    }

    public static void disp() {
        System.out.println("Printing Data " + name);
    }
}

答案 3 :(得分:0)

你根本不必调用父类的构造函数, 如果你的子类中你想要的只是name类成员的初始化值,那么你可以一次执行声明+初始化,如下所示。

public static String name = "ASD";

上述风格一目了然地说明变量是如何初始化的,它也会打印预期的输出。

当然,如果初始化值在不同的构造函数中不同,则必须在构造函数中执行此操作。您可以在this article中阅读有关对象初始化的更多信息。