当定义一个类时,如果我想自己定义构造方法而不是用系统缺省的,是不是必须先定义一个无参的构造方法再定义含参的?不能只有含参的而没有无参的构造方法?
例如下面的写法算不算错:
public class aaa{
    private int x;
    public aaa(int x){
      this.x=x;
    }
}而必须写成:
public class aaa{
    private int x;
    public aaa();
    public aaa(int x){
      this.x=x;
    }
}

解决方案 »

  1.   

    好像无参的构造方法也不能这样写,应该加上方法体吧:
    public aaa(){}; 
    或者
    public aaa(){;}
    只有抽象方法可以省略大括号吧? 
      

  2.   

    如果编写一个类时没有编写构造函数,系统就会提供一个默认的构造函数,将所有的属性设置为默认值:数值型数据设置为0、布尔型数据设置为false、所有对象变量将设置为null;如果一个类中提供了至少一个构造函数(一个类中可以有多个参数不一样的构造函数),但是没有提供默认的构造函数(就是无参的构造函数),是允许的,但是系统则不会分配无参数的构造函数,在调用无参的构造函数时视为不合法。
    请记住:仅当类没有提供任何构造函数的时候,系统才会提供一个默认的构造函数。如果在编写类的时候,给出哪怕一个很简单的构造函数,要想让这个类的用户具有以下采用构造实例的能力:new ClassName(),就必须提供一个默认的构造函数(即不带参的构造器);如果希望所有属性拥有默认的值,可以提供以下的构造函数:public ClassName(){}