zoukankan      html  css  js  c++  java
  • 对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();
        }
    
    }
  • 相关阅读:
    Thrift --- 支持双向通信
    Go -- 配置监控系统
    Go -- RPC 之 Thrift
    Go -- 一致性哈希算法
    Go -- runtime.Gosched()的作用分析
    Go -- import使用及. _的作用解析
    BNF 和 ABNF 扩充巴科斯范式 了解
    转 HTTP.SYS 详解
    转 HTTP/2: The Long-Awaited Sequel
    网站分析
  • 原文地址:https://www.cnblogs.com/txbblog/p/10364558.html
Copyright © 2011-2022 走看看