当前位置: 代码迷 >> J2SE >> 关于构造函数的异常
  详细解决方案

关于构造函数的异常

热度:104   发布时间:2016-04-23 19:55:44.0
关于构造函数的错误
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
我是普通函数方法
  相关解决方案