似乎我们被迫使用用户定义的构造函数(如果已经定义了构造函数)并且无法使用已提供的默认构造函数。
如果没有提供用户定义的构造函数,我可以这样做(默认构造函数)
Student s = new student() ;
一旦提供了用户定义的构造函数,我就不能再这样做了,这与C ++不同,我仍然可以使用提供的构造函数
我定义构造函数但无法执行Student s = new student()
package javaapplication1;
import java.util.*;
import java.io.*;
import java.lang.*;
public class JavaApplication1
{
public static void main(String[] args)
{
Student s = new Student(); // will get compiler error
System.out.println(s.getname());
}
public static class Student
{
private String name;
private int mark;
public Student(String namevalue , int markvalue) // user defined constructor
{
name = namevalue;
mark = markvalue;
}
public String getname()
{
return name;
}
public void setname(String value)
{
name = value;
}
}
}
我的分析是否正确,为什么会这样?
答案 0 :(得分:4)
您需要了解默认构造函数仅由Java编译器提供,如果您未能提供自己的构造函数。你做的那一刻,你也需要提供一个无参数的构造函数。这对新的程序员来说很困惑,但是如果你考虑一下它实际上很有意义 - 你真的希望Java在没有你控制的情况下为你创造东西吗?
答案 1 :(得分:1)
如果您想使用Student s = new student() ;
,只需在Stundent
- 类中定义第二个构造函数,不带参数:
public Student() { }
。
答案 2 :(得分:0)
行为是有充分理由的。
如果您想阻止开发人员在没有姓名和标记的情况下意外创建学生,该怎么办?如果Java总是添加自己的构造函数,那么你无法做到这一点,无论你编写什么构造函数。