每天一个java小知识点-匿名内部类

今天在看spring内的线程池的源码发现这么一块代码,是之前没有见过的,它是先

ThreadPoolExecutor  executor  = new ThreadPoolExecutor(xx,xx,xx,xx,xx){

//直接重写了方法

}

,没有见过这么操作的,于是开始研究

spring里面的ThreadPoolTaskExecutor#initializeExecutor方法中的

研究解释:

在 Java 中,当你创建一个新的对象时,通常情况下不会直接在 new 表达式中重写方法。但是,有一种特殊情况允许这样做,那就是使用 匿名内部类。

匿名内部类


匿名内部类是一种特殊的类,它没有显式的名称,通常用于实现接口或继承某个类,并且只在声明它的位置被使用。这种类可以在创建对象的同时定义,并且可以在其中重写或实现所需的方法。

如何使用匿名内部类重写方法


当你使用匿名内部类时,可以在 new 表达式中直接提供一个类的实现细节,包括重写的方法。例如,如果你有一个接口 Runnable,你可以像下面这样创建一个实现了 Runnable 接口的匿名内部类对象,并重写 run() 方法:

new Runnable() {
    @Override
    public void run() {
        // 在这里实现 run 方法
    }
};

只不过这个有很多形参倒是很陌生,所以没看出来,而且Runnable和Thread都是单方法接口,ThreadPoolExecutor是多方法的普通类。所以多方法的普通类也支持匿名内部类

ThreadPoolExecutor  executor  = new ThreadPoolExecutor(xx,xx,xx,xx,xx){

//直接重写了方法

}

为什么可以这样做

  1. 语法糖:这是一种语法糖,允许你在创建对象的同时提供类的实现。
  2. 局部类:匿名内部类本质上是一个局部类,它只能在创建它的那个方法或构造器内使用。
  3. 继承与实现:匿名内部类可以继承一个类或实现一个接口,并且可以在创建时重写必要的方法。
  4. 单次使用:通常匿名内部类是为了单次使用而设计的,因此没有必要给它们命名。 

又学到了一个知识点 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值