Java中的默认构造函数

时间:2013-04-21 11:26:15

标签: java constructor default

我的主类中有一个默认构造函数,似乎没有在运行时调用。这是一个例子:

public class Cat {
    private static int myval;

    Cat() throws IOException {
        this.myval = 7;
        System.out.println("Called constructor");
    }

    public static void main() {
        // Main program
    }
}

在运行时,我看不到窗口中输出的“Called constructor”行。我确定这是显而易见的事情!

非常感谢提前。

4 个答案:

答案 0 :(得分:2)

首先,您没有main方法。

你的是public static void main()

尝试运行它,编译器会告诉您没有main

enter image description here

其次,你没有实例化Cat。试试这个修改过的类,你会看到输出正确:

public class Cat {
    private static int myval;

    Cat() throws IOException {
        this.myval = 7;
        System.out.println("Called constructor");
    }

    public static void main(String args[]) throws IOException {
        Cat c = new Cat();
    }
}

结果:

Called constructor

答案 1 :(得分:1)

仍需要在main中调用构造函数。默认构造函数只是指未定义构造函数的类。你已经定义了一个构造函数,所以这只是一个无参构造函数。

查看Wikipedia文章,特别是Java和C#。

此外,您创建的方法需要被捕获,因为它会抛出异常。你的代码应该是这样的:

public class Cat {
    private static int myval;

    Cat() throws IOException {
        this.myval = 7;
        System.out.println("Called constructor");
    }

    public static void main() {
        try {
            Cat cat = new Cat()
        } catch (IOException e) {
            // do stuff with e
        }
    }
}

默认构造函数如下所示:

public class Cat { 
    private static int myval;

    public String meow() {
        return "Meow!";
    }
}

public class MainClass {
    public static void main(String[] argsv) {
        Cat cat = new Cat();
        System.out.println(cat.meow());
    }
}

答案 2 :(得分:0)

嗯,你真的没有真正创建过你班级的实例吗?你必须在main方法中创建一个Cat类的实例。

public static void main(){
// Main program
new cat();// this will invoke your constructor call
}

答案 3 :(得分:0)

当没有其他构造函数存在时,JVM会生成Java术语中的Default构造函数。通过编写构造函数,它不再是默认的构造函数!

另外,如上所述,您需要使用new关键字来调用Cat()构造函数。