• 对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();
        }
    
    }
  • 相关阅读:
    JSON的序列化和反序列化
    XML的序列化和反序列化
    FTP相关操作
    滑动换屏——Fragment
    AngularJS中复选框(checkbox)的ng-model
    AngularJS将时间戳格式化处理
    Let definitions are not supported by current JavaScript version
    MyBatis中的 suffixOverrides="," 失效
    MyBatisSystemException: Malformed OGNL expression: status != null
    MySQL字符串截取
  • 原文地址:https://www.cnblogs.com/txbblog/p/10364558.html
Copyright © 2020-2023  润新知