代码如下:
//构造函数测试
package firstPackage;public class Person 
{
private String name;
private int age;
private boolean bl;
// public Person(String n) 
// {
// name=n;
// // TODO Auto-generated constructor stub
// }
// public Person() {
// // TODO Auto-generated constructor stub
// }
// public Person(String n, int a) 
// {
// name=n;
// age=a;
// }

public void Person(String n)
{
name=n;
}
public void Person(String n,int a)
{
name=n;
age=a;
} public static void main(String[] args) 
{
// TODO Auto-generated method stub
Person Pa=new Person();
System.out.println("Pa.name="+Pa.name+"   Pa.age="+Pa.age+"   Pa.bl="+Pa.bl);
Person Pb=new Person("honey");
System.out.println("Pb.name="+Pb.name+"   Pb.age="+Pb.age+"   Pb.bl="+Pb.bl);
Person Pc=new Person("honey",23);
System.out.println("Pc.name="+Pc.name+"   Pc.age="+Pc.age+"   Pc.bl="+Pc.bl);
}}
当用运行这段代码的时候,会提示没有对应的构造函数。
当把当前这段构造函数用注释部分的构造函数替换掉,就正常了两部分构造函数唯一的差别就是void,这个是什么原因导致的,在别程序直接用void没有出现异常,请大侠解释
小弟最近在看java。

解决方案 »

  1.   

    构造方法没有返回类型,void不需要,带void的就不是构造方法了,被视为一般方法
      

  2.   

    //构造函数测试
    package firstPackage;public class Person 
    {
    private String name;
    private int age;
    private boolean bl;
    public void Person()
    {

    }// public Person(String n) 
    // {
    // name=n;
    // // TODO Auto-generated constructor stub
    // }
    // public Person() {
    // // TODO Auto-generated constructor stub
    // }
    // public Person(String n, int a) 
    // {
    // name=n;
    // age=a;
    // }
    // public void Person(String n)
    // {
    // name=n;
    // }
    // public void Person(String n,int a)
    // {
    // name=n;
    // age=a;
    // } public static void main(String[] args) 
    {
    // TODO Auto-generated method stub
    Person Pa=new Person();
    System.out.println("Pa.name="+Pa.name+"   Pa.age="+Pa.age+"   Pa.bl="+Pa.bl);
    // Person Pb=new Person("honey");
    // System.out.println("Pb.name="+Pb.name+"   Pb.age="+Pb.age+"   Pb.bl="+Pb.bl);
    // Person Pc=new Person("honey",23);
    // System.out.println("Pc.name="+Pc.name+"   Pc.age="+Pc.age+"   Pc.bl="+Pc.bl);
    }}这个带void 的Person()就没有报错,
    这是为什么?
      

  3.   

    没有构造方法的话,系统会自动生成一个不带参数的构造方法,所以Person Pa=new Person();是合法的(这个构造方法是系统自动生成的),而Person Pb=new Person("honey");则是非法的,因为没有这样的构造方法,带void的方法被视为一般方法,不是构造方法
      

  4.   


    //构造函数测试
    package firstPackage;public class Person  
    {
    private String name;
    private int age;
    private boolean bl;
    public void Person()
    {}// public Person(String n)  
    // {
    //  name=n;
    //  // TODO Auto-generated constructor stub
    // }
    // public Person() {
    //  // TODO Auto-generated constructor stub
    // }
    // public Person(String n, int a)  
    // {
    //  name=n;
    //  age=a;
    // }
    // public void Person(String n)
    // {
    //  name=n;
    // }
    // public void Person(String n,int a)
    // {
    //  name=n;
    //  age=a;
    // }public static void main(String[] args)  
    {
    // TODO Auto-generated method stub
    Person Pa=new Person();
    System.out.println("Pa.name="+Pa.name+" Pa.age="+Pa.age+" Pa.bl="+Pa.bl);
    //  Person Pb=new Person("honey");
    //  System.out.println("Pb.name="+Pb.name+" Pb.age="+Pb.age+" Pb.bl="+Pb.bl);
    //  Person Pc=new Person("honey",23);
    //  System.out.println("Pc.name="+Pc.name+" Pc.age="+Pc.age+" Pc.bl="+Pc.bl);
    }}这个带void 的Person()就没有报错,编译运行都能通过
    这是为什么?
      

  5.   

    跟你说了, public void Person()这个不是构造方法,你把它注视掉,一样能正常运行,构造方法是系统自动生成的,也就是说,系统自动生成一个 public Person()方法,所以new使用的是这个构造方法,不是那个带void的方法,LZ把void的那个方法注视掉再执行试试看就知道了,构造方法跟那个带void的方法没有任何关系,那个带void的方法只是一般方法
      

  6.   

    构造方法没有返回类型,void不需要,带void的就不是构造方法了,而是一个普通的方法,另外,如果你没有声明构造方法的话,系统会自动生成构造方法。
      

  7.   

    带void的Persion()是普通方法,而不是构造方法,构造方法是没有返回值类型的- -