面向对象中参数的使用
| 一、类类型参数的使用 |
|
【】可以在主函数外设立一个函数,承接类类型的变量,可以调动其中的成员变量和成员函数,进行数据修改和增加, 【】这里引用原来类里面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,那么相当于在堆内存临时开辟对象实体空间,和上下文都独立了。并且一旦执行完毕,这个对象就消失了。
|











浙公网安备 33010602011771号