java构造器

   引用:初始化和清理(之后再说清理)是涉及安全的两个重要问题。许多程序的错误都是由于忘记初始化变量。C++引入了构造器constructor,这是一个特殊方法:当创建对象是自动调用此方法。为了确保操作对象前,它已经初始化了,java也采用了构造器。

   构造器又可以称为:构造函数、构造方法。
   特点:

     (1)方法名和类名相同;

     (2)没有返回值,并不是返回值为空;

     (3)每个类都至少有一个构造方法。

示例:

public class Animal{
      Animal(){
            System.out.println("Animal()");
      }
}
Animal.java中Animal()就是一个构造方法。它与“每个方法首字母小写”的编码风格不同。 

    也许你可能会发现自己平常创建的一个类里面并没有构造方法,但这并不是上面第三个特点是错误的。

class Animal{}
public class Default{
      public static void main(String[] args){
            Animal d =new Animal();
      }
}

Animal类中并没有构造器,但是newAnimal()创建了一个新对象。这是因为如果你写的类中没有构造器,编译器会自动帮你创建一个默认构造器。

    默认构造器(又叫无参构造器)是没有形式参数的的构造器——它的作用是帮助我们创建一个对象。当我们显示的定义了一个构造器(不管是无参的还是有参的),编译器都不会再帮你自动创建默认构造器。

    既然有构造器,当然也有 有参构造器了。

public class Animal{
      String type;
      int age;
      Animal(){
           System.out.println("Animal()");
      }
      Animal(string type){
           this.type=type;
           System.out.println("Animal(type)"+type);
      }
       Animal(int age){
           this.age=age;
           System.out.println("Animal(age)"+age);
      }
       Animal(string type,int age){
           this.type=type;
           this.age=age;
           System.out.println("Animal()type"+type+"age"+age);
      }
}

上面Animal类中有四个构造方法,(方法的重载)。我们可以根据不同的需求调用不同的构造方法,创建自己想要的对象。上述的方法我们可以在一个构造器中调用另一个构造器。我们可以这样:

Animal(string type,int age){
     this(type);
     //this(age); 在一个构造器中只能调用一个构造器,不能调用两个。
     this.age=age;
     //this(type);并且构造器必须置于最起始处,放在这里会编译出错的。
     System.out.println("Animal()type"+type+"age"+age);
}

父类和子类构造器

先看一个例子:

 

class Person{
    Person(){System.out.println("我是个人。");}
}

class Flower{
    Flower(){System.out.println("我是一朵花。");}
}

class Man extends Person{
    Man(){System.out.println("我是个帅哥。");}
}

public class Boy extends Man{
    private Flower f =new Flower();
    Boy(){System.out.println("我是个小男孩。");}
    public static void main(String[] args){
       new Boy();
    }
}
输出:
我是个人。
我是个帅哥。
我是一朵花。
我是个小男孩。
上述代码调用构造器的顺序是:

1 调用基类构造器。这个步骤会不断反复递归下去。所以先输出的是Person中的内容然后是Man。

2 按声明顺序调用成员的初始化方法。初始化Flower输出“我是一朵花。”

3 调用导出类构造器的主体。

构造器的调用顺序非常重要。一定要记住。。。。


构造器和其他方法的区别:

     1)构造器没有任何修饰符,方法又许多(final、public、protected等) 
        2)返回类型也是非常重要的。方法能返回任何类型的值或者无返回值(void),构造器没有返回值,也不需要void 
        3)两者的命名。构造器使用和类相同的名字,而方法则不同。按照习惯,方法通常用小写字母开始,而构造器通常用大写字母开始。构造器通常是一个名词,因为它和类名相同;而方法通常更接近动词,因为它说明一个操作。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值