zoukankan      html  css  js  c++  java
  • 内部类访问外部类的方法

      作为一个工作了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结果如下

      

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

  • 相关阅读:
    sphinx安装
    如何获取原生数据
    DOM详解
    JavaScript简单入门(补充篇)
    JavaScript的简单入门
    Java正则表达式练习
    Java反射机制(Reflect)解析
    21070118记
    CSS3设置Table奇数行和偶数行样式
    获取当前地址
  • 原文地址:https://www.cnblogs.com/juniorMa/p/14072824.html
Copyright © 2011-2022 走看看