需求:
为了描述事物更准确,发现事物对应的很多对象一创建就有了一些初始化的数据。
通过Java中的另一个小技术完成,就是构造函数,对象本身就是构造出来。
构造函数的作用:可以对对象创建进行初始化。
构造函数在代码中的体现:
1:没有返回值类型,因为构造函数,创建完成就结束,不需要结果,void也不需要写,区别于一般函数。
2:构造函数名称和类名一致。
3:没有具体的返回值。
问:
没有学习构造函数是,对象已创建出来了,那么该对象是否有被构造呢?或者说是否有调用函数呢?
是的,必须调用!
那么类中那个构造函数是什么呢?
class Person
{
}
main()
{
Person p=new Person();
}
这就是已经调用了Person类中的空参数的构造函数。
类中有定义构造函数吗?有的,只要定义一个类。
该类中默认就有一个空参数的构造函数,是编辑器编译时添加到class文件中。
注意:如果在类中自定义了构造函数,那么默认的空参数构造函数编辑器就不添加了。
原理:
没有定义对象的初始化过程,编辑器会添加一个默认的初始化过程。
如果定义了指定的对象初始化过程,默认的就不添加了。
构造函数的细节:
1,一个类中可以有多个构造函数,它们的存在是以重载的形式体现的。
2,构造函数中也是有return语句的,用于结束初始化动作的。
3,构造函数是否能被private修饰呢?
能,作用,其他程序无法创建该类的对象。
class Person()
{
private Person(){}
}
main()
{
Person p=new Person();//创建对象,无法被初始化。
}
构造函数与一般函数的区别:
1,写法不一样
2,运行上有差别。
构造函数:对象一创建就会调用对应的构造函数
一般函数:是对象创建后,才会调用所需的一般函数。
3,构造函数在对象创建时,仅调用一次(初始化动作只做一次,而且先执行),一般方法可以被对象调用多次。
举例:
class Person
{
private String name;
private int age;
//定义构造函数,对象一创建就具备姓名。
Person(String n)
{
//将接受到的值赋值给对象的name
name=n;
}
public void speak()
{
System.out.println("name="+name+",age="+age);
}
}
public class test {
public static void main(String[] args)
{
Person p =new Person("chen");//对象创建时,必须会调用对应的构造函数。因为对象需要初始化。
p.speak();
}
}
补充:构造函数之间的调用
class Person
{
private String name;
private int age;
Person ()
{
}
//初始化姓名
Person(String n)
{
name=n;
}
//初始化姓名和年龄
Person(String n,int a)
{
this(n); // 调用一个字符串参数的构造函数。
// name=n;
age=a;
}
}
public class test {
public static void main(String[] args)
{
Person p =new Person("chen",20);//对象创建时,必须会调用对应的构造函数。因为对象需要初始化。
}
}
初步接触this关键字。