我的主类中有一个默认构造函数,似乎没有在运行时调用。这是一个例子:
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”行。我确定这是显而易见的事情!
非常感谢提前。
答案 0 :(得分:2)
首先,您没有main
方法。
你的是public static void main()
尝试运行它,编译器会告诉您没有main
。
其次,你没有实例化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()
构造函数。