疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java 封闭之构造函数


 

       1,构造函数

  构造函数是什么?

  在堆内存中创建对象的时候,对象均需要初始化.初始化的动作就有构造函数来实现.事实上,每个类在创建对象且初始化的时候均调用了一个"隐式构造函数". 用户在程序若重写声明构造函数则是"显式构造函数".JVM在执行的时候则以用户定义的构造函数为主.

  构造函数特点:

  <1>函数名必须与类名保持一致.

  <2>没有类型定义,即是没有void,int,String...类类型等等数据类型的修饰.

  <3>不可存在return语句.

  <4>可以通过“方法重载”的方式来区别不同对象的初始化方式.

  比如Person类,对象的初始化就如,刚刚诞生的婴儿那般.有的婴儿出生前还没有取好名字,但出生后称了体重;有的出生前已经取好了名字,且出生后也称了体重.但是不管怎么样,婴儿都是哭着来到这个世界的,所以都共同拥有一个方法cry()

  class Person{

  private String name; //姓名

  private int weight; //出生体重

  private int order; //编号

  //不取名字 也不称重

  Person(){

  System.out.println("Order:" + order + " do nothing!");

  cry();

  }

  //取好名字未称体重

  Person(int order ,String name){

  System.out.println("Order:" + order +",Name is: " + name);

  cry();

  }

  //未取名字,但称体重

  Person(int order,int weight){

  System.out.println("Order:" + order +",Weight is: " + weight+" Kg");

  cry();

  }

  //取了名字,称了体重

  Person(int order,String name,int weight){

  System.out.println("Order:" + order +",Name is: " + name + ",Weight is :" + weight +"Kg");

  cry();

  }

  //但是都是哭着来的

  void cry(){

  System.out.println("Crying when birth!");

  }

  public static void main(String[] args){

  Person child1 = new Person();

  System.out.println("-------华丽的分割线----------");

  Person child2 = new Person(1,"Smith");

  System.out.println("-------华丽的分割线----------");

  Person child3 = new Person(2,3);

  System.out.println("-------华丽的分割线----------");

  Person child4 = new Person(3,"John",3);

  }

  }

  /*运行结果如下:

  Order:0 do nothing!

  Crying when birth!

  -------华丽的分割线----------

  Order:1,Name is: Smith

  Crying when birth!

  -------华丽的分割线----------

  Order:2,Weight is: 3 Kg

  Crying when birth!

  -------华丽的分割线----------

  Order:3,Name is: John,Weight is :3Kg

  Crying when birth!

  */

  上面的代码,描述了构造函数的基本特点.一个空参数的构造函数和三个带有不同参数变量的构造函数,在实例化对象的时候便有了不同的实现方式.

  构造函数出现的时机:

  在定义类的时候,分析现实世界中具体事物的时候,若该事物存在或者具备一些特性或者行为,那就将这些内容定义到构造函数中.如例子中的婴儿,具有的特性就是体重等一些生理指标和名字标示符,行为动作就是出生后先哭.

  2,构造代码块

  是将重载的构造函数中所具有的共同的功能或者特性再次抽取出来,放在一起执行.

  格式,在程序中写一对大括号 { } 即可,与构造函数具有同样的域范围即可.然后将共有的特性抽取到括号内,比如cry(); 注下面程序中红色部分.

  并且是先于构造函数执行的. 可以参考下面代码执行的结果.

  如下面的代码.

  class Person{

  private String name; //姓名

  private int weight; //出生体重

  private int order; //编号

  //构造代码块

  {

  cry();

  }

  //不取名字 也不称重

  Person(){

  System.out.println("Order:" + order + " do nothing!");

  }

  //取好名字未称体重

  Person(int order ,String name){

  System.out.println("Order:" + order +",Name is: " + name);

  }

  //未取名字,但称体重

  Person(int order,int weight){

  System.out.println("Order:" + order +",Weight is: " + weight+" Kg");

  }

  //取了名字,称了体重

  Person(int order,String name,int weight){

  System.out.println("Order:" + order +",Name is: " + name + ",Weight is :" + weight +"Kg");

  }

  //但是都是哭着来的

  void cry(){

  System.out.println("Crying when birth!");

  }

  public static void main(String[] args){

  Person child1 = new Person();

  System.out.println("-------华丽的分割线----------");

  Person child2 = new Person(1,"Smith");

  System.out.println("-------华丽的分割线----------");

  Person child3 = new Person(2,3);

  System.out.println("-------华丽的分割线----------");

  Person child4 = new Person(3,"John",3);

  }

  }

  /*执行结果如下:

  Crying when birth!

  Order:0 do nothing!

  -------华丽的分割线----------

  Crying when birth!

  Order:1,Name is: Smith

  -------华丽的分割线----------

  Crying when birth!

  Order:2,Weight is: 3 Kg

  -------华丽的分割线----------

  Crying when birth!

  Order:3,Name is: John,Weight is :3Kg

  */

  以上就是构造函数最基本的应用了.当然构造函数,在子类继承父类的时候还有要注意的地方和细节,会在记录继承特性的时候补充.还望指正.

  大学生提升Java技能,首选疯狂Java培训。疯狂软件学院的Java培训(疯狂软件学院http://www.fkjava.org/抢座热线:020-28309358,020-28309378咨询QQ:707552864,544627560 )强大的教师队伍倾情授课,带领学生走近编程,感受编程,热爱编程。疯狂软件学院打造名企技术经理,成为中国软件产业的中流砥柱:全真企业需求,项目小组管理,大量实操项目的训练,企业全真案例教学,四个半月掌握近8~10万代码量,达到技术经理的代码掌握量。疯狂Java课程提供大量企业项目训练,让学员掌握技能理念,更让学员提高动手实战能力,在实际项目工作中能灵活运用,学成至少相当于两年工作经验。在招聘现场上让你轻松入职名企,拿高薪。