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
- JAVA笔记【20131214】
- java笔记
- JAVA笔记
- java笔记
- java笔记
- JAVA笔记
- java笔记
- Java 笔记
- java笔记
- java 笔记
- java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- 用GDB调试程序
- java文件受限搜索
- Spring ActionScript入门教程
- Hibernate继承和聚合的实现
- Ext_面板_Ext.Panel .
- JAVA笔记【20131214】
- QTP识别浏览器IE的对象依靠的BHO Manager
- GreenPlum创建外部表示例
- 总监生日
- spring作用域
- iOS 通知机制 Notifications (三)
- Struts2 拦截器总结(内置和新建)[转]
- 【cocos2d-x IOS游戏开发-城市跑酷14】重写触屏[Touch]事件处理机制,响应玩家操作
- MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.