MENU

构造函数&构造代码块 | Java

March 3, 2019 • 我爱学习

构造函数

构造函数的特点

  1. 函数名与类名相同
  2. 不用定义返回值类型(和void有区别,void代表没有具体结果返回的情况,而构造函数根本不需要定义返回值类型
  3. 不可以写return语句。
  4. 対象一建立,就会调用与之对应的构造函数。
  5. 构造函数也是函数的一种,有一也可以进行函数的重载。

构造函数的作用:

  • 可以用于给对象进行初始化

  注意:当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数,否则对象无法建立。

构造函数与一般函数的异同:

  • 构造函数是在对象一建立就运行,只运行一次,一般方法可以运行多次。

什么时候写构造函数:

  • 当分析事物时,该事物一存在就具备一些特性或行为,那么将这些内容定义在构造函数之中

构造函数之间相互调用

  • this(),且必须放在构造函数的第一行。(因为越详细的初始化越在前面)

    person(String n){     //结构函数的重载
    name = n;
     }
     person(String n,int a){        //结构函数的重载
    this(n);    //结构函数之间调用,调用person(String n)
    age = a;
     }

示例代码

class person{
    private String name;
    private int age;
    person(){     //结构函数
        System.out.println("A:name="+name+",age="+age);
        cry();
    }
    person(String n){     //结构函数的重载
        name = n;
        System.out.println("B:name="+name+",age="+age);
        cry();
    }
    person(String n,int a){        //结构函数的重载
        name = n;
        age = a;
        System.out.println("C:name="+name+",age="+age);
        cry();
    }
    public void cry(){
        System.out.println("cry...");
    }
}

public class test {
    public static void main(String[] args) {
        person p1 = new person();
        person p2 = new person("lisi");
        person p3 = new person("wangwu",10);
    }
}

输出结果

A:name=null,age=0
cry...
B:name=lisi,age=0
cry...
C:name=wangwu,age=10
cry...


构造代码块

构造函数的特点

  • 対象一建立就运行,且优先于构造函数
  • 结构上:只有一对{},其中放着要执行的代码。

与构造函数的区别

  • 构造代码块是所有对象进行统一初始化,构造函数是给对应的对象初始化
  • 初始代码块定义共性对象初始化内容(即执行的时同一类中每种构造函数都要执行的重复代码)。

示例代码(建议与结构函数对比一下)

class person{
    private String name;
    private int age;
    
    {        //重构代码块
        cry();
    }
    
    person(){     //结构函数
        System.out.println("A:name="+name+",age="+age);
    }
    person(String n){     //结构函数的重载
        name = n;
        System.out.println("B:name="+name+",age="+age);
    }
    person(String n,int a){        //结构函数的重载
        name = n;
        age = a;
        System.out.println("C:name="+name+",age="+age);
    }
    public void cry(){
        System.out.println("cry...");
    }
}

public class test {
    public static void main(String[] args) {
        person p1 = new person();
        person p2 = new person("lisi");
        person p3 = new person("wangwu",10);
    }
}

运行结果

cry...
A:name=null,age=0
cry...
B:name=lisi,age=0
cry...
C:name=wangwu,age=10
Last Modified: September 8, 2021
Leave a Comment

已有 1 条评论
  1. 现在很多都在用阿里的,不清楚两者的区别