corejDay1
1、内部类:
有什么用?
1、可以访问该类定义所在作用域中的数据,包括私有数据。
2、当想定义一个回调函数而不想编写大量代码时,使用匿名内部类比较便捷。
3、内部类可以对同一个包中的其他类隐藏起来。
什么时候用?
1、想省代码
2、想访问本类数据
3、想隐藏数据(要写的类,仅被一个类使用一次)
简单内部类举例
:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; /**
* Created by xkfx on 2017/2/12.
*/
public class InnerClassTest{
public static void main(String[] args){
TalkingClock clock = new TalkingClock(1000 , true); //参数改成100系统不响铃
clock.start(); JOptionPane.showMessageDialog(null , "Quit?"); //没有这两行代码,程序无法运行???
System.exit(0);
}
} class TalkingClock{
private int interval;
private boolean beep; public TalkingClock(int interval, boolean beep){
this.interval = interval;
this.beep = beep;
} /**
* Starts the clock
*/
public void start(){
ActionListener listener = new TimePrinter();
Timer t = new Timer(interval , listener);
t.start();
} private class TimePrinter implements ActionListener{ //设置成private就实现了封装 //这里有一个不可见的隐式引用 outer = 外围类对象
//下面的beep等价于 outer.beep
//TimePrinter有一个隐式的构造器 public TimePrinter(TalkingClock clock){ outer = clock; } @Override
public void actionPerformed(ActionEvent e) {
System.out.println("...");
if(beep) Toolkit.getDefaultToolkit().beep(); //内部类可以访问外围类对象的数据域
}
}
}
内部类的语法规则
:
局部内部类
:在一个方法中定义类
匿名内部类
:例如
public void start(int interval, boolean beep)
{
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent event){
System.out.println("...");
if(beep){
Toolkit.getDefaultToolkit().beep();
}
}
};
Timer t = new Timer(interval, listener);
t.start();
}
如何将静态内部类镶嵌在辅助类中
:
2、代理
有什么用?
可以在运行时创建一个实现了一组给定接口的新类。
只有在编译时无法确定需要实现哪个接口时才有必要使用。
什么时候用?
corejDay1的更多相关文章
随机推荐
- xtrabackup安装部署(二)
在官网中,复制相关链接下载最新版本(建议使用当前发布版本前6个月左右的稳定版本) https://www.percona.com/downloads/XtraBackup/LATEST/ 1.下载和安 ...
- 数据库outer连接
left (此处省略outer) join, 左边连接右边,左边最大,匹配所有的行,不管右边 right join,右边连接左边,右边最大,匹配所有的行,不管左边 条件直接放ON后面,是先筛选右边的表 ...
- Linux/Unix命令行安装weblogic软件
--通过java -jar wls1036_generic.jar启动安装weblogic软件进程: [weblogic@localhost mnt]$ java -jar wls1036_gener ...
- threading.Condition()
threading — Thread-based parallelism — Python 3.7.2 documentation https://docs.python.org/3/library/ ...
- complexity_action
大话数据结构 /* 顺序存储的结构 */ #define MAXSIZE 20 //存储空间初始分配量 typedef int ElemType; //ElemType类型根据实际情况而定,这里假设为 ...
- python全栈开发目录
python全栈开发目录 Linux系列 python基础 前端~HTML~CSS~JavaScript~JQuery~Vue web框架们~Django~Flask~Tornado 数据库们~MyS ...
- 完美解决onchange不能实时的监听
我们大家都知道onchange有时候很不好用,因为onchange事件是离开焦点后才会被触发,而不是实时去监听! 那么oninput()事件和onpropertychange()完美的解决了问题:(o ...
- idea导出war包并在tomcat上部署
生成war包 (一)进入项目配置页面 然后到达: (二)选择 设置好路径 然后apply (三)生成 然后再指定的目录就可以看见war包了. 部署到tomcat上 (一)将war包拷贝到tomcat的 ...
- 启动spark-shell
$cd /app/hadoop/spark-1.1.0/bin $spark-shell --master spark://SPARK02:7077 --executor-memory 500m 特别 ...
- 程序猿职业生涯中的 Norris 常数
我的朋友Clift Norris发现了一个基本常数.我称之为Norris常数,一个未经培训的程序猿在他或她遇到瓶颈之前能写出的平均代码量.Clift预计这个值是1500行. 超过这个数以后,代码会变得 ...