首页 > 代码库 > 构造函数

构造函数

1、概述

    构造函数:构建创造对象时调用的函数。
    作用:可以给对象进行初始化。创建对象都必须要通过构造函数初始化。

2、特点

   a、函数名与类名相同
   b、不定义返回值类型
   c、没有具体的返回值

3、类别

   构造函数可以有多个,用于对不同的对象进行针对性的初始化.
   多个构造函数在类中是以重载的形式来体现的。
    无参构造函数(默认构造函数)
    带参构造函数
一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。
如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。
 1     Person()//构造函数,而且是空参数的。
 2     {
 3         name = "baby";
 4         age = 1;
 5         System.out.println("person run");
 6     }
 7 
 8     Person(String n)
 9     {
10         name = n;
11     }
12 
13     Person(String n,int a)
14     {
15         name = n;
16         age = a;
17     }

 

4、一般函数和构造函数的区别

    a、调用时机
    构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
    一般函数:对象创建后,需要函数功能时才调用。 
    b、调用次数
    构造函数:对象创建时,会调用只调用一次。
    一般函数:对象创建后,可以被调用多次

5、构造函数内存图解

 1 class Person{
 2     private String name;
 3     private int age;
 4     Person(String n,int a){
 5         name = n;
 6         age = a;
 7     }
 8     public void speak(){
 9         System.out.println(name+":"+age);
10     }
11 }
12 
13 class ConsDemo{
14     public static void main(String[] args){
15         Person p2 = new Person("小强",10);
16         p2.speak();
17     }
18 }

 

a、main函数进栈,创建p2对象,在栈内存中创建p2变量,在堆内存中创建对象,对name和age默认初始化
技术分享
 
 
b、调用构造函数Person(String n,int a),构造函数进栈,将传递的参数值赋给n和a,n和a再将值赋给堆中的name和age
技术分享

 

c、构造函数执行完毕,弹栈,此时对象初始化完毕,再将地址值赋给变量p2,p2指向堆中对象
技术分享

 

 d、p2.speak(),speak()方法进栈,执行,完毕后弹栈
技术分享

 

6、注意事项

    a、构造函数如果完成了set功能。set方法是否需要?需要,构造函数的赋值是在创建对象时进行,且一次,而set可以多次调用。
1      Person(String n)
2     {
3     name = n;
4     }
5     public void setName(String n)
6     {
7     name = n;
8     }

 

    b,一般函数不能直接调用构造函数。
    c,构造函数如果前面加了void就变成了一般函数。
    d,构造函数中是有return语句的。

构造函数