java中匿名对象

我们在研究一个问题的时候通常分为四步,

是什么? -- 这个东西是什么

为什么? -- 为什么会有这个东西

怎么用? -- 这个东西怎么使用

总结

匿名对象是什么?通俗来讲,匿名对象就是没有名字的对象,只通过new开辟一块堆内存存储对象,而没有指向栈中的引用类型变量。

public class Test4_Nameless {
    public static void main(String[] args) {
        new Person(); //这是一个匿名对象
}
class Person{
    String name;
    int age;
}

在此之前,我们要搞清楚创建对象时,栈和堆内存中到底做了什么事:

1.Student s = new Student();

2.在栈内存中开辟空间存放引用类型的局部变量s(栈中数据的使用 -- 符合“先进后出”原则)

3.在堆内存中开辟空间存放对象,对象是类的实例,包含类的属性和功能

4.完成对象的初始化,将需要实例化的数据赋予默认值

5.给堆内存中对象分配唯一的地址值

6.把唯一的地址值交给栈中的引用类型变量s保存 

7.此后调用对象的资源时只需要在栈中找到引用类型变量s,根据其保存的地址值在堆中找到对象调用

二、为什么会有匿名对象的存在?

匿名对象的好处就是只可以使用一次,使用完就被垃圾收集器回收,不像对象可以重复的使用,通常我们只调用一次类里的属性或方法时使用

public class Test4_Nameless {
    public static void main(String[] args) {
        new Person(); //这是一个匿名对象
        System.out.printIn(new Person.name); //打印类的属性name
}
class Person{
    String name;
    int age;
}

怎么体现只使用一次,使用完就会被回收?

public class Test4_Nameless {
    public static void main(String[] args) {
        //创建对象
        Person2 p = new Person2();
        System.out.println(p.age + "\t" + p.name); //0 null
        //创建匿名对象
        System.out.println(new Person2().age + "\t" + new Person2().name); //0 null
        //返回值相同,因此匿名对象其实就是对象,对象具有的功能匿名对象也具有

        //创建多个匿名对象
        System.out.println(new Person2()); //第一次创建,使用后被回收
        //cn.tedu.review.Person2@1b6d3586
        System.out.println(new Person2());
        //cn.tedu.review.Person2@4554617c //重新创建,使用后同样被回收
        //可以看出,打印两个匿名对象,地址值是不同的
    }
}
class Person2{
    String name;
    int age;
}

总结:1.匿名对象就是没有名字的对象,和对象是一个东西

2.匿名对象只使用一次,使用完就会被回收,不像对象可以多次重复的使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值