构造函数

一、构造函数概述

构造函数是函数中的一种特殊类型。构造函数,一创建就直接自动运行的那个类附属的函数。

【】写法:没有返回值类型,函数名和类名一致。

【】运行:构造函数在对象一创建时就运行了。

【】作用,给对象初始化

【】对象不进行构造函数初始化就不能使用。(对象先默认初始化,然后构造函数初始化,之后才能使用)

【】构造函数,就是用来构造对象时用到的函数。格式是:new+构造器。

 
 
二、构造函数--默认构造函数

【】创建对象都要通过构造函数初始化(例子:创建Person的类)

【】一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数,Person(){}

【】一旦在类中定义了一个构造函数,默认的构造函数就消失了。(默认函数和构造函数,在参数和函数名上一样,那就相同)

【】程序员自己写了构造函数,编译器就不给加默认的了,没有,编译器就增加一个默认的构造函数。

【】同载函数,函数名相同,唯一的区分就在于参数列表。返回值类型都不是区分点。

构造函数同载和一般函数同载一样,只看两点,y(x),函数名和参数列表这两点。

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

【一】

【】构建函数,是对象初始化应该做什么事情,一创建就会被自动调用

【】一般函数,描述对象因该具备的功能,需要调用时程序员要手动调用

【二】

 【三】

构造函数一般函数,格式上都可以写权限符public或private,但是返回值类型

【】构造函数,必须没有返回值类型,----如果有,那就不再是构造函数而变成一般函数了

【】一般函数,必须有返回值类型

 
四、什么时候定义构造函数

【】Person中名字、年龄等事物存在就具备这些内容,直接输入构造函数,建立时初始化就有了这些数据

 
 
五、构造函数的同载

【】一个类里面可以有多个同名的构造函数,只要参数列表不一致即可。和一般函数的重载一样。---方法名相同,参数列表不一样,y(x)。

参数列表参数多少不同,参数数据类型不同,顺序不同,都是不同。但是,和参数名没关系,叫a。叫b,叫c,都一样。

【】作为强类型语言,参数列表哪怕个数一样,顺序不同,也是不一样的函数

这个函数可以重载,参数列表参数顺序不同

 
 
六、构造函数--内存图解

堆内存成员变量初始化,栈内存构造函数初始化。

【】首先主函数进栈,然后主函数里面p2变量开辟空间。此时还没有把内存地址传过来给p2

【】同时堆内存产生对象,出现内存首地址值。对象一产生,成员变量name、age也开辟空间,默认初始化name为null,age为0。

【】对象进行默认初始化后,开始调用构造函数进行构造函数初始化。

此时,Person(n,a)函数进入栈内存,构造函数的参数列表n,a开辟内存空间。小强,10传给person函数的参数列表,n=小强,a=10;之后person内部运算,n,a参数列表赋值给堆内存变量,name改为小强,age改为10。那个对象调用的这个方法,就把值赋给那个对象。

 

【】赋值之后,构造函数弹栈消失。弹完后,这个对象初始化完毕。此时右边才算完成了,这会,才会把内存地址给p2.

【】p2.speak执行,speak()函数进栈,p2指向对象,执行程序。执行完后,speak函数出栈。

【】栈内存:函数、成员函数、临时变量、函数参数列表。堆内存:实体数据,成员变量。

【】次函数的参数列表变量也在栈内存次函数中开辟空间,接收数据

 
 
七、构造函数的细节

1、一个私有化的成员变量往往附带着setXxx和getXxx这两个方法。

哪怕构造函数里面有name赋值操作,也不能不写这两个函数。因为构造函数只能初始化一次,之后想要修改数据就需要使用一般操作。

这两者不冲突,各自有应用场景

【】比如构造函数初始化,name叫旺财,之后想改名字,这时就可以调用setName函数改名为旺旺。

2、类中的构造函数可以调用次函数,但是次函数不能调用构造函数。因为没有对象,而构造函数是给对象初始化用的。

非要调用,得写成new Person();先创建对象才能调用。

3、构造函数前面没有返回值类型,只有一个    类名()

如果给类名()前面加上void,它就从构造函数变成了一般函数。void Person()

------毕竟一般函数不按规范可以用类名来命名。但这样阅读性太差,容易误导别人。

4、构造函数里面有return语句(结束函数用的)。直接写的情况不多。

如果年龄小于0,直接结束。

 5、类里面构造函数没设置空参数构造函数,那么创建对象new Person()就会报错。因为最初默认的构造函数在手动添加构造函数时就消失了。
posted @ 2025-07-21 15:25  ibddindonon  阅读(31)  评论(0)    收藏  举报