JAVA笔记【20131214】

来源:互联网 发布:阿里云服务器架设dnf 编辑:程序博客网 时间:2024/05/20 09:43

一、内部类

使用内部类的原因:

1、内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。

2、内部类可以对同一个包中的其他类隐藏起来。

3、当要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。


使用内部类访问对象状态:

内部类可以用public、private、protected、default任意一个修饰。也只有内部类才能使用private修饰。

内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域,包括私有域。

import java.util.* ;import javax.swing.*;import javax.swing.Timer;import java.awt.*;import java.awt.event.*;public class Test31{public static void main(String[] args){TalkingClock talkc = new TalkingClock(10000,true);talkc.start();JOptionPane.showMessageDialog(null,"Quit Programe?");System.exit(0);}}class TalkingClock{public TalkingClock(int interval,boolean flag){this.interval = interval;this.flag = flag;}public void start(){ActionListener actl = new TimerPrint();Timer t = new Timer(interval,actl);t.start();}private class TimerPrint implements ActionListener {public void actionPerformed(ActionEvent e){Date now = new Date();System.out.println("now the time is "+now);if(flag)  //此处flaa访问的是类TalkingClock的实例域。Toolkit.getDefaultToolkit().beep();}}private int interval;private boolean flag;}

局部内部类:

局部类不能使用public或者private访问修饰符进行声明。它的作用域就是在声明该局部类的块中

public void start(){class TimerPrint implements ActionListener {public void actionPerformed(ActionEvent e){Date now = new Date();System.out.println("now the time is "+now);if(flag)Toolkit.getDefaultToolkit().beep();}}ActionListener actl = new TimerPrint();Timer t = new Timer(interval,actl);t.start();}

匿名内部类:

所谓匿名内部类,也即只创建一次一个类的对象,连名字都不需要了。

匿名类不能有构造器,取而代之是将参数传递到父类构造器。当内部类实现接口时,不能有任何构造参数。

public void start(){ActionListener actl = new ActionListener(){public void actionPerformed(ActionEvent e){Date now = new Date();System.out.println("now the time is "+now);if(flag)Toolkit.getDefaultToolkit().beep();}};Timer t = new Timer(interval,actl);t.start();}

静态内部类:

当一个内部类不需要引用外围类对象时,可以将内部类声明为static。接口中的内部类,自动是static和public的。

import java.util.* ;import javax.swing.*;import javax.swing.Timer;import java.awt.*;import java.awt.event.*;public class Test31{public static void main(String[] args){TalkingClock talkc = new TalkingClock(10000,true);talkc.start();JOptionPane.showMessageDialog(null,"Quit Programe?");System.exit(0);}}class TalkingClock{public TalkingClock(int interval,boolean flag){this.interval = interval;this.flag = flag;}public static void start(){ActionListener actl = new TimerPrint();Timer t = new Timer(5000,actl);t.start();}private static class TimerPrint implements ActionListener {public void actionPerformed(ActionEvent e){Date now = new Date();System.out.println("now the time is "+now);Toolkit.getDefaultToolkit().beep();}}private int interval;private boolean flag;}

二、代理类有点模糊,后面搞明白再说。


0 0
原创粉丝点击