构造函数
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语句的。