面向对象中参数的使用

一、类类型参数的使用

【】可以在主函数外设立一个函数,承接类类型的变量,可以调动其中的成员变量和成员函数,进行数据修改和增加,

【】这里引用原来类里面num、color两个变量,并增加一条输出语句,原来类里面的函数并没有引用,所以一直沉寂

【】类类型的变量指向对象的内存地址,否则就是null空值。

【】类类型变量实际就是存储实体内存地址的引用型变量

 
二、匿名对象

 【】匿名对象:没有名字的对象。也就是没有开辟栈内存变量来长期存储该对象内存地址,因此该对象执行完毕就从堆内存消失,不占用紧张的空间资源。

有名字的对象Car c=new Car();。没有名字的对象new Car();其实就是定义对象的简写格式。

【】匿名对象没有栈内存变量指向,一运行完就从堆内存释放消失了。

【】所以匿名对象一般只用于方法的执行,毕竟方法运转完毕后会留下结果。

但是成员变量修改后会随着匿名对象消失而立即消失,无法进一步使用,白白设置变量数值了。

 

 

 

 【】如果定义一个类变量,并且只对其方法调用一次,就可以将定义+调用两句话简化为一句话new Car().run();

这样和用对象名调用方法本质一样,无非一个从栈内存变量存储的内存地址找到堆内存实体,另一个直接直接在堆内存实体。

 【】下面是三个对象的三次调用

【】new car()前半句在堆内存生成对象,然后将其中num改为5,执行完这个实体在堆内存消失,然后下一条语句接上

【】只修改实体属性,之后实体就消失了,赋值操作没有后续作用,白干一通。

一般,这种简化格式就是为了调用对象内部的函数的。

 

 

【】这个匿名对象作为实际参数进行传递很少使用,可以说直接把内存地址传过来,用后这个对象就就消失了。

 
 
三、基本数据类型参数的传递

【】虚拟机执行主函数,首先main进入栈内存,定义临时变量x=3,

之后show函数进入栈内存(进栈又叫压栈),他的临时变量x也开辟内存

【】主函数的x=3赋值给了show函数的x=3,执行show函数代码,赋值4给show的x;默认return;结束,没有返回数值给主函数。

之后show函数运行完出栈(弹栈);

【】主函数x还是3,sop结果3

【】就因为把x传给show函数了,但show函数没有return回来,造成主函数里面变量x数值没变化

 
 
四、引用数据类型参数传递

【】主函数先加载进入栈内存,主函数中临时变量d开辟空间,d指向堆内存中的对象;堆内存实体Demo,里面成员变量x先默认初始化0,之后赋值3

【】先是主函数变量d根据所存储的内存地址找到实体中x,赋值为9

【】另一个次函数show进栈,将main中的d赋值给了show,show通过d找到实体将成员变量x赋值为4。实体被实实在在改动。

【】return后show弹栈结束

【】应用型变量存储堆内存实体的内存地址,指向堆内存中的对象,各种操作都是对堆内存中哪个对象实体进行操作的。

 

 

 【】次函数指向实体的变动,变动的地方是堆内存的实体,不是次函数本身地方。

【】次函数中对传导过来的变量的变动,如果仅仅在次函数内部变而缺少return传回,那么一旦运行完毕就弹栈消失了

 

图片

 如果是把new Demo()传递到show,那么相当于在堆内存临时开辟对象实体空间,和上下文都独立了。并且一旦执行完毕,这个对象就消失了。

 

 
 
 
 
posted @ 2025-07-18 16:34  ibddindonon  阅读(7)  评论(0)    收藏  举报