对java中匿名对象和匿名类的简单理解

一、匿名对象

 匿名对象:没有名字的对象

匿名对象的特征:
      语法上: 只创建对象,但是不用变量来接收

      匿名对象的使用:
             1.匿名对象也是一个对象,具有对象的所有功能
             2.每一次使用匿名对象时,都是一个新的对象, 每次创建匿名对象都是不同的对象,一个匿名对象,只能使用一次,即匿名对象只能调用一次

 

      匿名对象只在堆内存中开辟空间,而不存在栈内存的引用

eg:

public class NiMingObject {

    public static void main(String[] args) {
        //1.非匿名对象(正常的对象)
        Dog d = new Dog();
        
        d.setAge(10);
        d.setName("来福");
        
        //d.eat();
        System.out.println(d.getAge()+"..."+d.getName());
        
        //2.匿名对象
        new Dog();
        
        //3.匿名对象的使用
        new Dog().setAge(18);
        new Dog().setName("旺财");
        
        System.out.println(new Dog().getAge()+"..."+new Dog().getName());
        //new Dog().eat();
    }

}

 

二、匿名类(匿名内部类)

如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用

如我们需要一个监听类,并且在实例化这个监听类的时候才需要实现这个监听类内部的方法,那么使用匿名类就最方便了

 

    public static void test01(){
        //使用匿名内部类快速 创建 AbstractAnimal抽象类的子类对象
        //第一种方式
        new AbstractAnimal(){

            @Override
            public void eat() {
                System.out.println("吃");
            }

            @Override
            public void sleep() {
                System.out.println("睡");
            }
            
            
        };
        //第二种
        new AbstractAnimal(){
            public void eat() {
                System.out.println(".....");
            }
            @Override
            public void sleep() {
                System.out.println("!!!");
            }
        }.sleep();
        //第三种
        AbstractAnimal an1 =  new AbstractAnimal(){

            @Override
            public void eat() {
                System.out.println("吃吃吃");
            }

            @Override
            public void sleep() {
                System.out.println("睡睡睡");
            }
            
        };
        
        an1.eat();
        an1.sleep();
    }

}

 

posted @ 2019-02-12 11:56  hxh奔跑的春风  阅读(12118)  评论(0编辑  收藏  举报