内部类访问外部类的方法

  作为一个工作了8年的程序员,内部类也用过,但是内部类访问外部类在看源码的时候都很少看到了,震惊之余也感叹自己的技术不行啊

  一 起因

  突然想起来自己在中兴的时候做SDN,当时是自己写netty定时往网元发送心跳。突然就想到了当时用的是Jdk的  ScheduledThreadPoolExecutor 

  也是心血来潮就想着看看源码吧

  实现定时的逻辑在  ScheduledFutureTask.run() 

  

public void run() {
            boolean periodic = isPeriodic();
            if (!canRunInCurrentRunState(periodic))
                cancel(false);
            else if (!periodic)
                ScheduledFutureTask.super.run();
            else if (ScheduledFutureTask.super.runAndReset()) {
                setNextRunTime();
                reExecutePeriodic(outerTask);
            }
        }

  注意了,这个 方法  reExecutePeriodic 是定义在   ScheduledThreadPoolExecutor  中的,而ScheduledFutureTask是 定义在 ScheduledThreadPoolExecutor 中的内部类。看到这里我懵了

  内部类的方法里直接访问外部类的方法??貌似我之前都没有注意过。

void reExecutePeriodic(RunnableScheduledFuture<?> task) {
        if (canRunInCurrentRunState(true)) {
            super.getQueue().add(task);
            if (!canRunInCurrentRunState(true) && remove(task))
                task.cancel(false);
            else
                ensurePrestart();
        }
    }

二 验证

  利用工具我们就验证下

  代码如下 。在项目工程下产生两个文件 Person.class, Person$InnerClass.class

public class Person {
    
    private class InnerClass {
        
    }

  执行javap结果如下

  

  能看到内部类中持有一个外部类类型的成员变量,这就说的通了可以直接访问外部类的方法了

posted on 2020-12-02 11:40  MaXianZhe  阅读(697)  评论(0编辑  收藏  举报

导航