内部类学习三局部内部类

减速机/变速机2020年06月14日

这里我们介绍一种特殊的内部类:局部内部类(Local Inner Classes)。

在前面的例子中,我们可以发现TimerPrinter仅在start方法中创建一个新的对象时出现过一次,其它地方都没再用到过,这个情况下我们可以把TimerPrinter就定义在start方法中,如下面代码所示:

public void start(){

class TimerPrinter implements ActionListener{

//private boolean beep;

public void actionPerformed(ActionEvent e){

intln("Bigface,would you be my boy?");

if(beep) tDefaultToolkit().beep();

}

}

TimerPrinter action=new TimerPrinter();

Timer t=new Timer(interval,action);

art();

}

注意,局部内部类不需要任何access modifier,否则编译出错,它的作用域一般都被限制在它所在的block中。此时,编译会产生一个名字叫Court$1TimerPrinter的class文件。局部内部类有如下两个优点:

1. 它对外面的所有类来说都是隐藏的,即时是它所属的外部类,仅有它所在的方法知道它;

2. 它不仅可以访问它所属外部类中的数据,还可以访问局部变量,不过局部变量必须生命为final类型,看下面的例子:

package st;

import tionListener;

import tionEvent;

import olkit;

import ptionPane;

import mer;

public class InnerClassTest {

public InnerClassTest() {

super();

}

public static void main(String[] args) {

Court court=new Court();

art(5000,true);

owMessageDialog(null皖J黄山,"停止么,CMTobby?");

}

}

class Court{

public void start(int interval,final boolean beep){

class TimerPrinter implements ActionListener{

public void actionPerformed(ActionEvent e){

intln("Cindyelf,are you crazy?");

if(beep) tDefaultToolkit().beep();

}

}

TimerPrinter action=new TimerPrinter();//编译器会自动更改

Timer t=new Timer(interval我们的行业影响力。 中国幼教现有注册会员都有30多万,action);

art();

}

}

注意,局部内部类所要访问的局部变量必须声明为final类型,如上例中红色粗体部分。那么局部内部类是如何访问这个局部变量的呢?我们再对Court$1TimerPrinter反射一下,会得到如下的输出:

class urt$1TimerPrinter

{

urt$1TimerPrinter(urt, boolean);

public void actionPerformed(tionEvent);

final urt this$0;

private final boolean val$beep;

}

编译器又给我们增加了一个域val$beep,同时构造方法增加了一个boolean类型的参数,因此我们猜想如下的实现过程:

TimerPrinter action=new TimerPrinter(this,beep);//编译器自动增加

然后构造方法中会有:val$beep=beep;这样就成功的把局部变量的值复制过来了。局部变量必须为final就是为了保证成功的复制值,因为final类型的变量一经赋值就不能再发生变化了。

心脏搭桥适应症
常年过敏性鼻炎发作原因
活血化瘀消肿止痛的药
相关阅读
当代风雅大师——石一

石一,1953年7月底生,出身菁英。少年时喜好山水画,在校经常舞文弄墨。未满后...

2024-04-24
我借此我的爱情是这样的

我希望我的真悲情是这样的,相濡以沫,举案齐眉,平淡如井水。我在岁里面...

2024-04-21
小伙单膝跪地向好看的女友订婚,女子全程冷漠吃饭,未做任何回应

真情人先真情己,不管是男是女,只有在真情自己的思路去真情别人,才能平...

2024-04-02
相媲美天然钻石,研究人员培育出最大10克拉的人工钻石

科幻新媒体6月23日讯(刘亚珠) 据悉,经过西田的金刚石被称作红宝石,红...

2024-03-09
随时成为TVB“亲生女”!30岁人气缪斯宣布:与旧经理人公司约满

本文由 港喜剧喜剧透王为 编辑部 轩逸王为 作者原创/刊登请求写明 大姐30岁...

2024-01-31
爱你是我的自由,就让你是我的感觉

往昔里你曾激浪勇进,不曾管天是晴割,幻想要若破灭随之粗犷,风卷浪花水...

2024-01-21
友情链接