A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈艳南 中级黑马   /  2013-5-15 22:46  /  1102 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沈艳南 于 2013-5-16 11:57 编辑

当对对象方法仅进行一次调用的时才能使用匿名对象 这句话该怎么理解

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

倒序浏览
比如 你定义了一个Person类,里面定义了一个show()方法,
你只使用一次,并且调用show()方法,你就可以这样写   new Person().show();
这样使用一次后new Person()就会被当成垃圾清理,因为没有任何对象只想他
而 Person p = new Person()这样用之后,对空间的Person对象存在,因为 有个P对象指向他。
明白了吧,一般匿名对象都是当参数传递来用的,后面多线程会用到,你可以看看。
回复 使用道具 举报
这是属于匿名内部类的问题:
当你如果只想使用一次对象的方法,而不是多次使用,那么可以定义一个匿名内部类,不需要定义一个有名字而且很繁琐的类,因为你只需要使用一次!

匿名内部类一般格式:就是内部类的简化写法。
前提:内部类可以继承或实现一个外部类或者接口。
格式为:new 外部类名或者接口名(){覆盖类或者接口中的代码,也可以自定义内容。}

简单理解: 就是建立一个带内容的外部类或者接口的子类匿名对象。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
本帖最后由 第一枭雄 于 2013-5-15 23:33 编辑

简单解释:
     匿名就是没有名的,没有名的就是没有引用指向的,就是用完就是垃圾,随时可能被回收的。
     当要使用多次的时候你也可以定义多个匿名对象,但他们等于创建一个,使用,然后变成垃圾,回收。要用的时候再创建,再使用,再变成垃圾回收。每次都是新建的而不是同一个对象。所以每一个就只能用一次了。
     而你要多次调用的时候显然就是要一个对象多次使用,他都没有名,用一次就死,你当然不能多次使用了。
     

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
我的理解是

为什么特别强调一次呢?就是因为调用的不多,可以直接用匿名对象后面加点直接调用方法。因为本身就只调用了一次而已,我们没必要去栈内存特地开辟一个空间定义一个变量名,这样做费力不讨好,因为你调用了一次方法后,你这个变量名也没任何用处了。

而当调用多次方法时,当然用一个变量代替new后面这一大堆,方便得多了。因为要调用多次我们直接用变量名调用,不管书写还是简化代码上都好得多。

其实最主要的原因是,多个方法时,你想用一个匿名对象去调用多个方法是不可能的。匿名对象调用格式是什么?new  XXX 点 方法一
                                                                                                    new XXX 点 方法二
                                                                                                    new XXX 点 方法三  
发现端倪没?new代表什么?每次new一下,就代表又在堆里面 创建了一个新的对象。上面其实是3个对象分别调用了方法一 方法 二  方法三
已经不是一个对象了!!!

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
楼主你好   如果帖子已经解决  请把帖子的类型改为“已解决”。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马