黑马程序员技术交流社区

标题: 有关匿名对象与有名对象的区别【已解决】 [打印本页]

作者: 刘煜    时间: 2012-6-9 21:19
标题: 有关匿名对象与有名对象的区别【已解决】
本帖最后由 刘煜 于 2012-6-12 14:57 编辑

求高手总结,匿名对象与有名对象有哪些不同?
作者: 黑马-唐磊    时间: 2012-6-9 21:25
匿名对象  是一种简写形式

1  当对方法仅进行一次调用的时候 ,可以使用匿名对象(方法调用完后立刻销毁)

2 匿名对象可以作为实际参数进行传递



有名对象 :可以对有名对象的属性或功能进行 多次调用

class Person {
  String name = "jack";
  int age = 28;
  void show() {
   System.out.println(name + "---" + age);
  }
  public static class PersonDemo {
   public static void main(String[] args) {
    people(new Person());
               new Person().age=9;//没有意义的    立即销毁
    Person p = new Person();
    p.show();
    p.name = "劳务";
    p.show();
   }
  }
  public static void people(Person P) {
   P.age = 15;
   P.name = "laoshu";
   P.show();
  }
}

匿名内部类


class Inner {
   void show() {
    System.out.println("inner  demo");
   }
  }
  class Outter {
   public void function() {
    new Inner() {//创建Inner 的子类对象  这就是匿名内部类
     void show() {
      System.out.println("outter demo");
     }
    }.show();
   }

}
  





  abstract class Inner {
   abstract void show();
  }
  class Outter {
   public void function() {
    new Inner() {//创建抽象类的子类匿名对象
     void show() {
      System.out.println("outter demo");
     }
    };
   }

}


作者: 王月    时间: 2012-6-9 21:54
匿名的意思就是没有名字。匿名对象就是没有名字的对象。是对象的一种简写形式。如:有名对象调用方法时:Person p = new Person();  p.show().而匿名对象可以直接这样写:new Person().show()
什么时候使用: 1,当对该对象只执行一次方法调用的时候可以用匿名对象。
                         2, 可以作为实际参数传递(例如,public static void show(Person  p){},在主函数中就可以用show(new Person);来作为实际参数传入show()中)

               lz应该明白了吧,还不明白的话给我留言,详细跟你说。
                                                                                 
作者: 黑马-王言龙    时间: 2012-6-9 22:01
本帖最后由 wyl530274554 于 2012-6-9 22:09 编辑

看这个例子
  1. class Student {
  2.         
  3.         String name;
  4.         int age;
  5.         Student(String name, int age) {
  6.                 this.name=name;
  7.                 this.age=age;
  8.         }
  9.         
  10.         void study() {
  11.                 System.out.println(name + " : 在学习");
  12.         }
  13. }

  14. class Demo{
  15.         public static void main(String[] args) {
  16.                 Student s1 = new Student("张三", 22);        //有名对象
  17.                 s1.study();                                              //调用两次study()方法,用s1指向即可,是同一对象
  18.                 s1.study();
  19.         
  20.                 new Student("张三", 22).study();        //匿名对象
  21.                 new Student("张三", 22).study();        //调用两次study()方法,new了两个,不是同一对象
  22.         }
  23. }

  24. /*
  25. 我们都想世界变的越来越来单纯,两句并一句,你懂的
  26. 1、匿名对象是"有名对象"的简写,方便;2、还可以作为实际参数进行传递
  27. 同时带来的弊端是:匿名对象调用同一方法一次以上,就不是同一个对象的方法了。
  28. */
复制代码

作者: 邓杰    时间: 2012-6-9 22:08
当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。
匿名对象使用方式二:可以将匿名对象作为实际参数进行传递。
如果对一个对象进行多个成员调用,必须给这个对象起个名字。

作者: 许恩君    时间: 2012-6-9 22:44
一个有名字 一个没名字。有名字的话,你想用就可以用,没名字的话,只能用一次。一般的匿名类,或实现某个接口,做为实例的监视器中常用到。如:this.addActionListerer(new  ActionListener()
{//实现未实现的方法
public void actionPerformed(ActionEvent e){//doSomething}
});
这样的监视器常常会用到匿名类





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2