public class Student {
String name;
int id;
public Student(String name,int id){
this.name = name;
this.id = id;
}
public void Student(){
System.out.println("how are you ?");
}
public static void main(String[] args) {
Student a = new Student();
a.Student();
}
}
在main函数那边显示 "The constructor Student() is undefined"请问哪里错了,我是新手
------解决思路----------------------
首先要清楚一点:如果你没有主动声明构造函数,那么JVM会自动给你生成一个无参构造函数。如果你已经主动声明了构造函数,那么虚拟机不会自动生成构造函数。
你的情况属于后者,你声明了一个具有String,int类型的有参构造函数,所以JVM不会自动生成无参构造函数,并且你也没有主动声明无参构造函数,所以,提示你没有Student()这个构造函数未定义!
------解决思路----------------------
构造方法的必要条件是:1.方法名必须与类名相同
2. 不要声明返回类型
3.不能被static、final、synchronized、abstract和native修饰
------解决思路----------------------
楼上几位说的很清楚了,我再总结一下吧
如果类中没有构造函数,那么系统会自动给你分配一个无参的构造函数,
例如
public class Student{
}
系统会自动帮你生成一个无参的构造方法:
public Student() {
}
这样你就可以使用Student stu = new Student();
但是如果你写了构造方法,系统就不会帮你生成了,
public class Student {
public Student(String name, int age) {
//do sth...
}
}
这样的话系统不会生成一个无参的构造方法,所以new Student();就报错了
------解决思路----------------------
2楼解释清楚了已经
Student a = new Student(); 如果你不写构造函数 系统是默认的一个 你可以用Student a = new Student();
但是 你自己写了一个构造函数public Student(String name,int id) 你的这个构造函数是有参数的 也就是说系统默认的 那个无参的构造函数已经被你写的构造函数覆盖了
所以你的Student a = new Student(); 没有找到 无参的构造函数
改成
Student a = new Student(“名字”,12345); 就没有错误了
------解决思路----------------------
public class Student {
String name;
int id;
public Student(String name, int id) {// 构造函数
this.name = name;
this.id = id;
System.out.println("我是构造函数name=" + this.name + "----id=" + this.id);
}
public Student() {// 普通方法
System.out.println("我是普通函数方法");
}
public static void main(String[] args) {
Student a = new Student("名字", 123456); // 对象初始化 执行构造函数
System.out.println("name:" + a.name + ",id:" + a.id);
Student b = new Student();
}
}
输出结果:
我是构造函数name=名字----id=123456
name:名字,id:123456
我是普通函数方法