在下初学JAVA,莫喷=w=
嗯,下面是疑问…
既然类可以这么写——
public abstract class Animal
{
    String name="noName";
    String voice="noVoice";
    int age=0;
    //....
}那么为什么还需要写像
public Animal()
{
    name="noName";
    voive="noVoice";
    age=0;
}
这样的无参构造函数呢?这两种方式有什么不同?优缺点?

解决方案 »

  1.   

    public abstract class Animal
    {
      String name="noName";
      String voice="noVoice";
      int age=0;
      //....
    }这样的话,变量的值都是固定的,不能通过外部进行修改,也就是每次定义这个对象之后,里面的这些参数的值都是固定的。比如 定义一个 student类
    要是按照上面的写法:class Student{
    private String name ="张三";public Student(){
    }}
    按照另外一种方式来写,就比较实用了:public Student(String name){
    this.name = name;
    }这样的话以后要定义 王五、阿毛 、阿狗都可以直接用这个方式:Student amao = new Student("阿毛");
    Student agou = new Student("阿狗");这样就可以很方便的定义 多个Student对象。
    而之前的那种写法比较适合给同一个对象设置统一的一些固定的属性。
    比如 顶一个 男同学 对象可以直接在 Student 里面 这样写
    private sex = "男";这样默认都是男同学,不用再创建对象的时候每次都通过参数设置。
      

  2.   

    那么为什么还需要写像
    public Animal()
    {
      name="noName";
      voive="noVoice";
      age=0;
    }
    这样的无参构造函数呢?========这样写的目的是在使用new Animal()创建一个 对象的时候进行初始化设置。而之前的
    public abstract class Animal
    {
      String name="noName";
      String voice="noVoice";
      int age=0;
      //....
    }
    这种写法只是对Animal的一个属性的定义。
    一般不这样写。而是写成:
    public abstract class Animal
    {
      String name="";
      String voice="";
      int age;
      //....
      public Animal()
      {
      name="noName";
      voive="noVoice";
      age=0;
      }
    }
      

  3.   

    一般不这样写。而是写成:public abstract class Animal
    {
      String name="";
      String voice="";
      int age;
      //....
      public Animal()
      {
      name="noName";
      voive="noVoice";
      age=0;
      }
    }
    =====================================
    这样运行了
    Aniaml a=new animal();
    两种的最终结果是一样的啊,都是
      name="noName";
      voive="noVoice";
      age=0;嘛…一般是后一种写法是知道了…不过第一种写法好像也不会出什么问题?是不是实例变量都最好都给设个默认值?后一种写法如果有
    public Animal(String n,String v)
    {
      name=n;
      voive=v;
    }
    这种构造函数的话,是不是最好写成
    public Animal(String n,String v)
    {
      name=n;
      voive=v;
      age=0;
    }

    public Animal(String n,String v)
    {
      this();
      name=n;
      voive=v;
    }
    这样的?好吧…我又钻牛角尖了(不过还是想知道…)
    感谢各位大大