java 我们可以调用构造函数而不创建它的对象吗

wixjitnu  于 2023-05-27  发布在  Java
关注(0)|答案(5)|浏览(186)

这段代码中发生了什么?我想在不调用构造函数的情况下将输出显示为“Printing data 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);
    }
}
6kkfgxo0

6kkfgxo01#

给test 2类的name对象赋值。会成功的

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

67up9zun2#

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);
    }
}
kx7yvsdv

kx7yvsdv3#

,不创建对象就不能调用构造函数。

除非你通过test2 = new test2();创建test2的对象,否则你将在name中获得null
如果构造函数是静态的,那么你调用它的唯一方法,但是constructors in Java can't be static.所以你必须创建一个对象来调用构造函数。

xa9qqrwz

xa9qqrwz4#

你根本不需要调用父类的构造函数,如果你想要在子类中初始化name类成员的值,那么你可以像下面这样一步完成声明+初始化。

public static String name = "ASD";

上面的样式让我们一目了然地看到变量是如何初始化的,它还将打印出预期的输出。
当然,如果不同构造函数中的初始化值不同,则必须在构造函数中进行。你可以在this article中阅读更多关于对象初始化的内容。

9w11ddsr

9w11ddsr5#

不,如果没有创建对象,我们就不能调用构造函数

相关问题