指针的形象化理解
关于指针我本人的理解:
指针就是一串数字,指针变量就是一张空白的卡,给空白的卡印上数字,这张卡就能找到一间房间了,这个房间可能很小,只住了一个变量,也可能很大,住着一个对象
每张卡的质量都是一样的,四个字节
但有的卡又长又薄,有的卡又短又厚,每种尺寸的卡都只能记录一类数字,也就是只能记录一类变量的地址
例如整形变量的数字就只能印在特定长度的卡上面.
新建一张特定长度的卡的方法是 int *p,其中int*是特定的长度,这种卡只能保存int类型的变量的数字,p表示这张卡
取数字的方法是&,例如取i的数字就是&i;
把整形变量i的数字刻到卡上就是:int *p=&i,新建一张特定的卡和取数字,
把房间号给某个特定的卡,就代表你把这间房间授权给这张卡使用了
也就是说,这张卡可以访问你的房间,你的房间有可能只有一个变量,或者有一个对象,这都无所谓,反正你能通过这张卡访问房间
对了,一个变量就是一个房间,,int a 就是新建了一个放整形变量的房间
假如p这张卡保存了a变量的房间号,那么*p就表示这间房间了,同时代表了这个房间里的变量或方法
python的变量房间既有雕像又有按钮,例如a是一个列表变量,那么a就引用了一个对象,这个变量a的房间既有雕像又有按钮,a.sort就是a这个房间里的一个按钮sort.
java的变量房间一般只有雕像,没有按钮,例如a是一个数组,那么变量a的房间只有雕像,没有按钮,要对数组进行操作,就要把雕像复制一份发送过去(传值),要么把雕像所在的房间发送过去,让按钮过来直接操作这个雕像(传引用)
一句话,不同类型变量的数字用不同尺寸的卡来保存,例如int类型变量的数字用int * 尺寸的卡来保存,一个变量就是一个房间,java的变量房间一般只有雕像,取变量的地址用&,新建一张卡片用int *,int表示一种卡片类型
接下去理解一下 A aa = new A
A aa表示新建一张符合A类模型的空白卡,new A表示新建一个总统房间,并返回一个数字,这串数字能索引到这个房间,能放很多东西的那种房间,然后把房间的数字刻到aa这张卡上面,从此以后*aa就代表这个房间了
aa.i的意思就是这座房间的i成员,省略了*
类就是一种房间模型,例如只有两个按钮一个雕像的房间模型,也有那种只有雕像的房间模型,按钮就是类里面的方法,雕像就是类里面的变量,房间模型在没有上色之前只是投射出来的,不占空间,涂色之后就叫对象,就占空间了,就算涂的是无色也是对象,也占空间,有的类生来就是一个房间,这种类当然占空间了,那就是static类,这种类本来就是房间,所以不需要别人上色,不能实例化
每个类(模型,)都是由雕像和按钮组成的,有的类只有雕像,有的类只有按钮,有的类全都有,相应地,每个对象也是如此
新建一个对象只是涂颜色而已,你新建完对象之后才可以给房间添砖加瓦
类的雕像和按钮都是没有颜色的,给类的雕像和按钮涂颜色叫做实例化一个类,也就是新建一个对象,
当然你也可以涂和原来一样的颜色:无色,也就是不传递参数给类,通过涂无色也可以新建一个对象
A就是一个类,new A()就是给类涂无色,也就是给模型里的按钮和雕像涂上无色,然后建立起一个对象,当然,你需要找一张你这种类的卡来保存你这个对象的数字,也就是A aa,新建出一张叫做aa的空白卡
对了,这张卡保存在一个四方形杯子里,也就是指针变量保存在栈里面
对象保存在平地上,也就是保存在堆里,当然,对象里的雕像,有的放在房间的杯子里,有的雕像放在房间的平地上,也就是对象内的变量,有的变量保存在栈里,有的变量保存在堆里
一句话,变量就是雕像,方法就是按钮,类就是没有上色的模型,对象就是有上色的房间,有可能上的是无色颜料,有的类是不允许外部给他上色的,那就是静态类,不能实例化静态类
一般的类只是一个模型,相当于透明的大楼,只是投影出来的,这种类不占内存空间
但有的类比较特殊,是特殊的类,这种类也是一个实实在在的房间,占据内存空间,也就是static修饰的类占据内存空间
按钮不占房间的空间,也就是不占对象的空间,因为按钮本省占的空间比起雕像可以忽略不计,实现按钮功能的代码不在本地,按下按钮就会像传真一样把远方的代码传过来并执行,执行完又把方法删掉了,所以按钮内部的实现代码是保存在其他地方的

浙公网安备 33010602011771号