Java自学笔记系列十一:封装(五) 构造函数(一)

 

  借助互联网的资源和信息,完善以前学习过得的知识点:虽然缓慢,但我始终前行.

  2012年结束前本可以结束JavaSE基础学习的,种种原因,暂停了一段时间,接下来的时间内就把对知识点的一些理解和感悟逐一记录下来,权且是一个知识的梳理.

 接着上篇: Java自学笔记系列八:封装(四) 内部类

 继续前行!

  1,构造函数

    构造函数是什么?

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

  构造函数特点:

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

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

     <3>不可存在return语句.

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

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

  
  
  
  
  1. class Person{ 
  2.  
  3.     private String name; //姓名 
  4.     private int weight;  //出生体重 
  5.     private int order;   //编号 
  6.      
  7.     //不取名字 也不称重 
  8.     Person(){ 
  9.       System.out.println("Order:" + order + " do nothing!"); 
  10.       cry(); 
  11.     } 
  12.     //取好名字未称体重 
  13.     Person(int order ,String name){ 
  14.         System.out.println("Order:" + order +",Name is: " + name); 
  15.         cry(); 
  16.     } 
  17.     //未取名字,但称体重 
  18.     Person(int order,int weight){ 
  19.         System.out.println("Order:" + order +",Weight is: " + weight+" Kg"); 
  20.         cry(); 
  21.     } 
  22.     //取了名字,称了体重 
  23.     Person(int order,String name,int weight){ 
  24.         System.out.println("Order:" + order +",Name is: " + name + ",Weight is :" + weight +"Kg"); 
  25.         cry(); 
  26.     } 
  27.  
  28.     //但是都是哭着来的 
  29.     void cry(){ 
  30.         System.out.println("Crying when birth!"); 
  31.     } 
  32.  
  33.     public static void main(String[] args){ 
  34.          Person child1 = new Person(); 
  35.          System.out.println("-------华丽的分割线----------"); 
  36.          Person child2 = new Person(1,"Smith"); 
  37.          System.out.println("-------华丽的分割线----------"); 
  38.          Person child3 = new Person(2,3); 
  39.          System.out.println("-------华丽的分割线----------"); 
  40.          Person child4 = new Person(3,"John",3); 
  41.     } 
  42.  
  43. /*运行结果如下: 
  44. Order:0 do nothing! 
  45. Crying when birth! 
  46. -------华丽的分割线---------- 
  47. Order:1,Name is: Smith 
  48. Crying when birth! 
  49. -------华丽的分割线---------- 
  50. Order:2,Weight is: 3 Kg 
  51. Crying when birth! 
  52. -------华丽的分割线---------- 
  53. Order:3,Name is: John,Weight is :3Kg 
  54. Crying when birth! 
  55. */ 

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

  构造函数出现的时机:

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

  2,构造代码块

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

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

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

     如下面的代码.

  
  
  
  
  1. class Person{ 
  2.  
  3.     private String name; //姓名 
  4.     private int weight;  //出生体重 
  5.     private int order;   //编号 
  6.  
  7.     //构造代码块 
  8.     { 
  9.       cry(); 
  10.     } 
  11.      
  12.     //不取名字 也不称重 
  13.     Person(){ 
  14.       System.out.println("Order:" + order + " do nothing!"); 
  15.     } 
  16.     //取好名字未称体重 
  17.     Person(int order ,String name){ 
  18.         System.out.println("Order:" + order +",Name is: " + name); 
  19.     } 
  20.  
  21.     //未取名字,但称体重 
  22.     Person(int order,int weight){ 
  23.         System.out.println("Order:" + order +",Weight is: " + weight+" Kg"); 
  24.     } 
  25.  
  26.     //取了名字,称了体重 
  27.     Person(int order,String name,int weight){ 
  28.         System.out.println("Order:" + order +",Name is: " + name + ",Weight is :" + weight +"Kg"); 
  29.     } 
  30.  
  31.     //但是都是哭着来的 
  32.     void cry(){ 
  33.         System.out.println("Crying when birth!"); 
  34.     } 
  35.  
  36.     public static void main(String[] args){ 
  37.      
  38.          Person child1 = new Person(); 
  39.          System.out.println("-------华丽的分割线----------"); 
  40.          Person child2 = new Person(1,"Smith"); 
  41.          System.out.println("-------华丽的分割线----------"); 
  42.          Person child3 = new Person(2,3); 
  43.          System.out.println("-------华丽的分割线----------"); 
  44.          Person child4 = new Person(3,"John",3); 
  45.     } 
  46. /*执行结果如下: 
  47. Crying when birth! 
  48. Order:0 do nothing! 
  49. -------华丽的分割线---------- 
  50. Crying when birth! 
  51. Order:1,Name is: Smith 
  52. -------华丽的分割线---------- 
  53. Crying when birth! 
  54. Order:2,Weight is: 3 Kg 
  55. -------华丽的分割线---------- 
  56. Crying when birth! 
  57. Order:3,Name is: John,Weight is :3Kg 
  58. */ 

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

本文出自 “IvanTian” 博客,转载请与作者联系!

你可能感兴趣的:(构造函数,封装,构造代码块)