美文网首页
Java内部类到底是什么玩意(一)

Java内部类到底是什么玩意(一)

作者: 赵志文学编程 | 来源:发表于2017-05-16 22:11 被阅读0次

前言

最近为了复习基础学的东西比较杂,翻看Core Java了,看到内部类这一块感觉理解的和以前不一样。

正文

为了做示例可能会用java GUI来说明更加合适,当然书上也是拿这个例子来做解释的

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.Timer;

public class TestInnerClass {
    public static void main(String[] args) {
        TimerClock clock = new TimerClock(true);
        clock.start();
    }
}

class TimerClock {
    private boolean isClocked = false;
    public TimerClock(boolean isClocked) {
        this.isClocked = isClocked;
    }
    public void start() {
        ActionListener listener = this.new TimerPrinter();
        Timer t = new Timer(1000, listener);//定时器
        t.start();
    }
    private class TimerPrinter implements ActionListener{
    
        @Override
        public void actionPerformed(ActionEvent e) {
            if(!isClocked) {
                Date date = new Date();
                System.out.println(date);
            }else {
                Toolkit.getDefaultToolkit().beep();//会发出铃声
            }
        }   
    }
}

为什么内部类可以访问外部类的私有变量,我们可以单独拎出来看,一开始我以为就是内部类持有一个外部类的引用也就是内部默认自动生成有

private TimerClock outer;
public TimerPrinter(TimerClock clock) {
       outer  = clock;
}

然后下面的调用就是outer.isClock(其实不是这样传的,不过机制是可以这么理解,后面会讲到)那么外部类实际上生成的是TimerClock.this.isClock(区别内部类的this)
问题又来了凭什么能够访问isClock变量,它不是私有的吗,按照常理理解它在内部当然能访问外部变量了,但是实际上可能不是这样的在外部类多了这么一行代码

static boolean access$0(TimerClock clock) //返回beep值

然后内部调用时调用access$0(outer)(方法名字可能变化,outer方便看懂);
明天稍微讲一下局部内部类和匿名内部类

相关文章

  • Java内部类到底是什么玩意(一)

    前言 最近为了复习基础学的东西比较杂,翻看Core Java了,看到内部类这一块感觉理解的和以前不一样。 正文 为...

  • Java内部类到底是什么玩意(二)

    前言 自己昨天挖的坑含泪都要填完,其实昨天自认为内部类讲的还不够透彻,因为只是说并没有拿出任何证据说明内部类持有了...

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • 内部类

    内部类可以分为:非静态内部类;静态内部类;匿名内部类。 一、内部类 首先要说,Java为什么要使用内部类?java...

  • Java静态内部类

    Java静态内部类 博客分类: java 两种内部类 Java的内部类有两种,一种是静态内部类,另一种是普通内部类...

  • 类的编译期与运行期

    非静态内部类 非静态内部类到底可以有静态属性吗? static成员变量,或者static final常量 非静态内...

  • JavaSE基础知识学习-----内部类

    内部类 类的五个成分:属性,方法,构造器,代码块,内部类。什么是内部类?在java中,允许一个类定义在另一个类的内...

  • Java内部类

    Java内部类 大纲: java内部类有什么特点?为什么需要内部类? 非静态内部类持有外部类的引用 内部类的分类。...

网友评论

      本文标题:Java内部类到底是什么玩意(一)

      本文链接:https://www.haomeiwen.com/subject/zlqrxxtx.html