我们知道一般实例化一个对象的格式,如下:

Car car = new Car();

其中,变量名 car 就是 new Car() 这个对象的名字。car 是引用类型的变量,它的值存放的是对象的引用(或地址),通过 car 这个变量我们就可以间接使用对象。

那所谓 Java 匿名对象,简单理解就是对象没有名字嘛。那怎样的对象会没有名字呢?如下:

new Car();

那这种匿名对象如何使用呢?所谓使用就是指调用对象的属性和方法。如下:

new Car().door;

new Car().start();

这两行代码有两个 new 关键字,说明实例化了两个对象,并不是一个哦。

由于这两个对象没有名字,所以这两行代码执行完以后,我们就无法再使用它们了,然后它们将会被 GC(Java 垃圾回收机制)当作垃圾回收掉。

所以,匿名对象只能被调用一次。

那匿名对象有什么用处呢?没什么卵用。

唯一有点用处的地方就是,当对象对方法或属性仅进行一次调用的时候,使用匿名对象可以少写一些代码,代码看起来更简洁。

//匿名对象调用方法

new Car().start();

//非匿名对象调用方法

Car car = new Car();

car.start();

看到了吧,使用匿名对象只需要一行代码,而非匿名对象需要两行代码。

另外,匿名对象也可以作为参数传递给方法

//给汽车添加一个重启方法

public void restart(Car car) { // 汽车熄火了,需要传入另一辆汽车帮忙点火重新启动

//...

}

Car car = new Car();

car.restart(new Car()); //匿名对象作为参数使用

以后看到匿名对象的使用,相信你不会再觉得别扭或奇怪啦。

java匿名对象 回收_Java 匿名对象相关推荐

  1. java对象深克隆_JAVA中对象的克隆及深拷贝和浅拷贝

    使用场景: 在日常的编程过程 中,经常会遇到,有一个对象OA,在某一时间点OA中已经包含了一些有效值 ,此时可能会需一个和OA完全相对的新对象OB,并且要在后面的操作中对OB的任何改动都不会影响到OA ...

  2. java 老年代回收_Java垃圾回收之老年代垃圾收集器

    1.Serial Old 收集器(-XX: +UseSerialOldGC, 标记-整理算法) 1.1 单线程收集,进行垃圾收集时,必须暂停所有工作线程 1.2 简单高效,Client模式下默认的老年 ...

  3. java final 变量 回收_java入门教程-Java中final,finally,finalize三个关键字的区别

    final 当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被继承,因此一个类不能被同时声明为abstract和final.当final修饰变量或者方法时,可以保证他们在使用中不会被 ...

  4. java 强制垃圾回收_Java垃圾回收机制

    Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...

  5. java栈的回收_JAVA的堆栈和内存、垃圾回收解说

    1.有关java健壮性特点的真相 很多书上都说java健壮性的特点是因为java使用数组代替了c++的指针:c++最令人头痛的问题就是内存问题,java的健壮性使编程人员不用再考虑内存的问题:这种观点 ...

  6. java加快内存回收_java内存管理之垃圾回收及JVM调优

    GC(garbage Collector 垃圾收集器) 作用:a.内存的动态分配:b.垃圾回收 注:Java所承诺的自动内存管理主要是针对对象内存的回收和对象内存的分配. 一.垃圾标记 程序计数器.J ...

  7. java 手动垃圾回收_java如何进行垃圾回收的

    转:http://blog.csdn.net/yakihappy/article/details/3979944 垃圾收集的目的在于清除不再使用的对象.gc通过确定对象是否被活动对象引用来确定是否收集 ...

  8. java String如何回收_java中的垃圾回收

    原文-http://blog.csdn.net/zsuguangh/article/details/6429592 1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确 ...

  9. java对象交互_Java 2 对象交互

    2.1 对象交互 2.1.1 时钟的设计: 用一个类来表示时钟和分钟. 对象Display: (属性)成员变量value limit (操作)成员函数increase getValue package ...

最新文章

  1. 下怎么运行sh脚本_基于CentOS7系统添加自定义脚本服务及参数说明,附实例
  2. SQL 2005 Express 的“企业管理器” 下载
  3. 偏差/方差、经验风险最小化、联合界、一致收敛
  4. Linux的inode的理解
  5. html纵向滚动特效,带视觉差效果的垂直全屏整页滚动特效
  6. 【HihoCoder - 1850】字母去重 (字符串,思维)
  7. 【鉴轻尘】BTC的暴跌的是因为BCH的分叉,但是你知道为什么?
  8. 使用python 启动一个web服务
  9. Revit2018下载和安装教程
  10. linux设置ipsan_linux下ipsan的配置
  11. 一位H3CIE攻坚之旅
  12. 括号匹配(POJ2955)题解
  13. 读《所谓情商高,就是会说话》笔记
  14. Docker学习手记-1
  15. 笔记本电脑wifi怎么连接
  16. RS WLAN产品测试全面解决方案
  17. 趣味数学--贷款计算
  18. request.getSession().setAttribute()和 request.setAttribute()
  19. 【持续更新-34家】百亿量化私募名单-2022年7月27日
  20. 21 根火柴游戏(常胜将军)

热门文章

  1. linux两个卷组可以合并,Linux系统中所有的逻辑卷必须属于同一个卷组()。
  2. gitee提交代码_git 版本控制,github和gitee
  3. java double add,Java中的DoubleStream.Builder add()方法
  4. php获取mysql所有表_PHP获取MySQL数据库里所有表的实现代码
  5. C语言 指针和数组区别 - C语言零基础入门教程
  6. jq之animate()队列
  7. php $app-run(),Thinkphp 5.x 应用启动 App::run()
  8. php 变量 换行,php去除换行符的方法小结(PHP_EOL变量的使用)_PHP教程
  9. android界面初始化设计,界面数据初始化及各个按钮功能的实现
  10. 请编写一个程序,请将字符串中所有字母全部向后移一位,最后一个字母放在字符串的开头,最后将新的字符串输出。