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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马黄宏强 黑马帝   /  2012-7-20 11:22  /  2430 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 轻尘一笑 于 2012-7-20 12:50 编辑

1.匿名对象可以作为实际参数进行传递
public class Tesl {
        public static void main (String [] args){
                show(new Car());
        }
        //汽车改装场
        public static void show(Car c){
                c.num=4;
                c.color="黑色";
                System.out.println("汽车改装完成");
        }
}
class Car{
        int num;
        String color;
}
我的疑问是:
show(new Car()); 这句有什么意思? 这方法执行完了车不是就销毁了吗?还是老师想向我表达的是匿名对象可以这么用,只是他现在写的这方法没有实际意义而已。  求解疑惑,或给举个带有实际意义的例子。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
  1. 这里的
  2. show(new Car());
  3. 是因为Test 中定义show(Car c)中需要传入一个Car类型的变量
复制代码
你老师想向你表达的是匿名对象可以这么用
回复 使用道具 举报
     楼主的理解是对的,new Car()出来的对象是个临时对象,用一次之后以后就可以不再用。相当于一次性的,如果你只是想要用一个对象一次并且以后不再用的话就是使用匿名对象,这儿的使用估计就是老师想表达匿名对象可以这么用的吧!
回复 使用道具 举报
show(new Car());这句话意思是:调用show方法时,在堆内存中产生了一个Car对象
                                            这个对象作为参数传进show方法后,c就成为该对象的引用存在栈内存中
                                           此时,Car对象不会销毁,在进行了一系列操作后,show方法结束,Car对象才销毁
这样的好处是:使对象的生命周期在它调用完成的时候就结束,省了点内存,呵呵。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主的理解完全正确,匿名对象只能使用一次,这样的好处就是可以节省内存空间。现在我们写的程序少,还看不出什么优越处,但是一旦要创建的对象比较多时,匿名对象的优点就显现出来了。下面我举一个匿名对象实际应用的例子:
BufferedReader br=new BufferedReader(new FileReader("D:\\b.txt"));
这是在后面IO流中的代码,创建一个BufferedReader对象之前必须得创建FileReader对象,可是这个FileReader对象只调用一次就不需要再调用,而创建成匿名对象后,调用之后匿名对象会自动被垃圾回收掉,可以节省内存空间。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
那是不是可以这样理解呢,我只需要这个对象在该方法中使用,该方法结束就不会用到了,所以让它随着方法的完整而销毁,
“使对象的生命周期在它调用完成的时候就结束,省了点内存”
我可不可以这样理解
正常的对象是当没有引用指向它的时候才会被销毁,其实匿名对象的使用就是帮我们完成了这个步骤,就是使用完后将对象的引用
指向null,其实使用匿名对象的本质就是想偷点懒。。。。。。
回复 使用道具 举报
程潇 中级黑马 2012-7-20 12:41:09
7#
之所以用匿名对象,就是因为只用它一次。如果只用一次的话,就无需再为这个对象建立一个引用了,这样的话就节省了内存空间。
其用途一般也有两种:
1.就是楼主例子中的用法,将匿名对象作为实参传给方法,然后执行方法
2.通过生成的匿名对象,直接调用该对象的方法。举例如下:
先定义一个类:
class Person{
    public void run(){
        System.out.println("run");
    }
}

如果我只想使用一次这个类的run方法,那么可以: new Person.run();

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢大家的答疑!
回复 使用道具 举报
王超 中级黑马 2012-7-20 14:41:19
9#
什么时候使用匿名对象?
当你用一个对象一次并且以后不再用的话可以使用
相当于是一个临时对象,使用后就可以丢弃,节省了内存空间
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马