java中关于匿名对象的一些小问题

匿名对象:

所谓匿名对象,就是没有名字的对象,就是在创建对象时不起名字。

如创建一个Student对象:  new Student();   这样,一个匿名对象已经创建完了。

匿名对象需要注意的几个问题:

1.生命周期:


首先,创建一个匿名对象并将其中的name属性初始化为“sss”;

其次,调用Car中的fun方法打印其属性值;


可以看到“sss”已经消失了,因为匿名对象在创建完之后,直接被系统释放掉了。也就是说,在Car中的全局变量是随着类的加载而加载,这样,在使用new Car().name()时,由于是匿名的,类就终结了,因此上一个初始化name属性的“sss”就消失了。

如果不想让初始化的属性值消失,那么您可以在创建类时,将想保留的属性定义为静态的,如:


就像这样,此时name被声明为静态,因此会放入静态存储区(共享区),于是就不会随着类的消失而消失了。就像这样:


其中第一句的new Car()可以直接换成Car,因为静态属性可以通过类名.的方式调用。下面是运行结果:


两次运行结果相同,表明了共享区的内容为所有对象所共享。

2.可以作为实参传递

如果匿名对象要通过实参进行传递,只需要定义一个带有匿名类型的形参(就是匿名对象所在的类的类型)的方法,然后直接将匿名对象作实参就可以了。



运行结果:


由于name是静态的,因此被更改的值不会随着匿名对象的结束而结束。但是可以看到,匿名对象还是作为实参传递了过去。

猜你喜欢

转载自blog.csdn.net/baidu_38760069/article/details/80169266