JAVA 构造函数未定义

class Student{
private String name;
private int math;
public void student(){}
public void student(String n,int m){
this.setName(n);
this.setMath(m);
}
public void setName(String n){
name=n;
}
public void setMath(int m){
math=m;
}
public String getName(){
return name;
}
public int getMath(){
return math;
}
public String getinfo(){
return this.getName();
}

}
public class Test{
public static void main(String args[]){
Student st=new Student("aaa",222);
System.out.println(st.getinfo());
}
}

中Student st=new student("dadasd",333)d的时候,提示为构造函数为定义student(String,int)

构造函数是没有返回类型,这个没有就是完全无,void都没有的。
public void student(String n,int m){
this.setName(n);
this.setMath(m);
}

这是一个方法而不是构造函数。
如果想到达到你的目的只需要把 void删除,那么这个方法就成为构造函数了。代码就正确了。

java类默认的构造函数是: 一个空参数 一类名为方法名 无返回类型修饰,按照你所写的类, 那么方法是 public Student(){}

而你的这个student(String n,int m)方法,java编译看做是一个方法,而不是构造函数
目前他只有一个默认的构造函数那就是 public Student(){} 无参数,你传了参数那么当然找不到构造函数。

记住一点:构造函数是一个特殊的函数,他是无返回类型修饰(就是没有任何返回类型,包括void也没有),其次就是 和类名一摸一样。这才是构造函数。参数就随意了。追问

但是去掉viod就提示缺少方法的返回值~~

追答

当然,因为你的方法名是小写的,注意。方法名要和类名一摸一样才是构造函数

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-10
public void student(String n,int m){
this.setName(n);
this.setMath(m);
}
这个不是构造函数
构造函数没有返回类型
改成:
public student(String n,int m){
this.setName(n);
this.setMath(m);
}

希望对你有帮助追问

去掉void后会提示缺少方法的返回值。而返回值类型一个是String一个是int 不知道该如何给定

第2个回答  2013-01-10
class Student {
private String name;
private int math;
Student(String name,int math) {
this.math=math;
this.name=name;
}
public void student() {
}

public void student(String n, int m) {
this.setName(n);
this.setMath(m);
}

public void setName(String n) {
name = n;
}

public void setMath(int m) {
math = m;
}

public String getName() {
return name;
}

public int getMath() {
return math;
}

public String getinfo() {
return this.getName();
}
}

增加构造方法
Student(String name,int math) {
this.math=math;
this.name=name;
}
第3个回答  2013-01-10
不需要指定void