借助互联网的资源和信息,完善以前学习过得的知识点:虽然缓慢,但我始终前行.
2012年结束前本可以结束JavaSE基础学习的,种种原因,暂停了一段时间,接下来的时间内就把对知识点的一些理解和感悟逐一记录下来,权且是一个知识的梳理.
接着上篇: 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
- */
以上就是构造函数最基本的应用了.当然构造函数,在子类继承父类的时候还有要注意的地方和细节,会在记录继承特性的时候补充.还望指正.
本文出自 “IvanTian” 博客,转载请与作者联系!