文档介绍:第六章构造函数和析构函数
构造函数
析构函数
构造函数
虽然对象被创建时,对象的成员变量会被自动初始化。但有时候需要对成员变量进行动态的初始化。我们可以通过某一方法对成员变量进行初始化。
public class Person
{
private int age;
private int height;
public void initialize(int a;int h)
{ age=a;height=h;
}
}
//每创建一个对象,都需要显式调用初始化函数
Person p1=new Person();
(20,175);
有一种机制,使得在定义对象时能够自动对成员变量进行初始化,而无需显式地调用某个初始化函数。
这种机制就是构造函数。
怎样定义构造函数
构造函数的调用时间
构造函数的重载
静态构造函数
1 构造函数是一种特殊的方法,定义构造函数的方式与定义方法类似。
2 构造函数的名称与类的名称相同。
3 定义构造函数时不指定函数的返回值类型。
(1)怎样定义构造函数?
针对刚才的初始化问题,可通过构造函数解决
public class Person
{
private int age;
private int height;
public Person(int a,int h)
{ age=a;height=h;
}
}
Person p1=new Person(20,175);
在对象被创建时,系统将自动调用构造函数。
Person p1=new Person();
上述语句一旦执行,系统将按顺序进行下列操作:
(1)在堆中为对象分配内存
(2)按定义顺序对该对象所有成员变量进行自动初始化,如果成员变量定义时指定了初值,则按初值进行初始化。
(3)调用构造函数
(4)将引用变量p1指向堆中的对象
(2)构造函数的调用时间
设计电脑类(电脑包括主机和显示器)
栈内存
堆内存
p1
New Person(20,175)
产生的对象
5
10
0x3000
栈内存
p1
New Person(20,175)
产生的对象
20
175
age
height
age
height
public class Person
{
private int age=5;
private int height=10;
public Person(int a,int h)
{ age=a;height=h;
}
}
执行本程序后的内存变化过程
堆内存
Person p1=new Person(20,175);
构造函数可以重载,即在一个类里可以定义多个构造函数。
public class Person
{ private int age;
private int height;
public Person()
{ age=10;height=100; }
public Person(int a,int h)
{ age=a;height=h; }
}
Person p1=new Person();
Person p2=new Person(20,175);
(3)构造函数的重载
(4)静态构造函数
静态构造函数用于初始化类的静态成员,只被执行一次。
没有访问区分符。