6.2 接口实例

6.2.1  接口与回调

在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘。

在构造定时器时,需要设置一个时间间隔,并告知定时器,当到达时间间隔时需要做些什么操作,(java将某个类的对象传递给定时器,然后的定时器调用这个对象的方法。)-----定时器需要知道调用了哪一个方法,并要求传递的对象所属的的类实现了java.awt.event包的ActionListener接口。

 public interface ActionListener
{
void actionPerformed(ActionEvent event);
}

当到达指定的时间间隔时,定时器就调用actionPerformed方法。

接下来,构造这个类的一个对象,并将他传递给Timer构造器。

 ActionListener listener =new TimePrinter();
Timer t =new Timer(10000,listener);

下面程序给出了定时器和监听器的操作行为,在定时器启动以后,程序将弹出一个消息对话框,并等待用户点击OK按钮来终止程序的运行。定时时间为5秒;

 package cc.openhome;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.Timer;
public class TimerTest {
public static void main(String[] args) {
ActionListener listener =new TimePrinter();
Timer t=new Timer(5000,listener);
t.start();
JOptionPane.showMessageDialog(null, "Quit program?");
System.exit(0);
}
}
class TimePrinter implements ActionListener
{
public void actionPerformed(ActionEvent evet )
{
System.out.println("At the tone ,the time is "+new Date());
Toolkit.getDefaultToolkit().beep();
}
}
At the tone ,the time is Sun Mar 18 10:28:51 CST 2018
At the tone ,the time is Sun Mar 18 10:28:56 CST 2018
At the tone ,the time is Sun Mar 18 10:29:01 CST 2018
At the tone ,the time is Sun Mar 18 10:29:06 CST 2018
At the tone ,the time is Sun Mar 18 10:29:11 CST 2018
成功构建 (总时间: 26 秒)

run:

Api    javax.swing.JOptionPane 1.2

static void showMessageDialog(ComPonent parent,Object message)

显示一个包含一条消息和OK按钮的对话框,这个对话框将位于其parent组件的中央。

API javax.swing..Timer 1.2

Timer(int interval ,ActionListener Listener)

构造一个定时器,每隔interval毫秒通告listener一次。

void start()

启动定时器。一旦启动成功,定时器将调用监听器的actionPerformed。

API void stop()

停止定时器,一旦停止成功,定时器将不在调用监听器的actionPerformed。

java。awt.Toolkit  1.0

static  Toolkit getDefaultToolkit()

获得默认的工具箱。工具箱包含有关GUI环境的信息。

void beep()

发出一声铃响。

6.2.2  Comparator接口

假设我们希望按长度递增的顺序对字符串进行排序,而不是按字典顺序进行排序。

处理这种情况,Arrays.sort方法还有第二个版本,有一个数组和一个比较器(comparator)作为参数,比较器实现了Comparator接口的类的实例。

public interface Comparator<T>
{
int compara(T first,second);
}

要按长度比较字符串,可以如下定义一个实现Comparator<String>的类

class LengthComparator implements Comparator<String>
{
public int compare(String first,String second)
{
return first.length()-second.length();
}
}

具体完成比较时,需要建立一个实例:

Comparator<String> comp =new lengthComparator();
if (comp.compre(words[i],words[j]>0)...

要对一个数组排序,需要为Arrays.sort方法传入一个LengthComparator对象:

String[] friengds ={"Peter","Paul","Mary"};
Arrays.sort(friends,new LengthComparator());

java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类的更多相关文章

  1. java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类

    6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义.例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口 ...

  2. java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类

    6.1.2 接口不是类,不能实例化一个接口:但是可以声明接口的变量:Comparable x;    接口变量必须引用实现了接口的类对象:x = new Employee(); 检查一个对象是否属于某 ...

  3. Java核心技术卷一 · 笔记(2)

    目录 1.多态.动态绑定 2.覆盖 3.阻止继承:final 类和方法 4.抽象类(abstract修饰) 5. 4 个访问修饰符: 6.toString() 7.对设计继承关系很有帮助的建议 8.接 ...

  4. java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类

    6.2.3   对象克隆 Cloneable 接口,这个接口指示一个类提供了一个安全的clone方法.(稍作了解) 为一个对象引用的变量建立副本时,原变量和副本都是同一个对象的引用,任何一个变量改变都 ...

  5. java核心技术卷一笔记(1)

    jdk是java开发工具包,里面包含了javac.jar.javadoc.java等工具,可以在bin目录中找到.有一个文件夹是jre,即jdk也包含了java运行环境.jre可单独安装,只是运行ja ...

  6. Java核心技术卷一 · 笔记(1)

    目录 1.java的关键术语 2.==和equals 3.空串与 Null 串 4.构建字符串 5.封装 6.对象的三个主要特性 7.依赖(dependence).聚合(aggregation).继承 ...

  7. java核心技术卷一笔记(2)

    ---恢复内容开始--- 异常.断言 所有的异常都继承自Throwable类,异常包括已检查异常和未检查异常,应该抛出已检查异常,而未检查异常要么是不可控的(Error),要么是应该避免发生的(Run ...

  8. 【阅读笔记】Java核心技术卷一 #0

    这是一篇备忘性质的读书笔记,仅记录个人觉得有用的知识点 本文作为一个目录索引,部分章节跳过 吐槽:此书中文翻译有不少地方不太通顺,这种情况我要把英文版对应的部分也读一遍才能明白(说实话,英文里的从句表 ...

  9. 对《Java核心技术卷一》读者的一些建议

    <Java核心技术卷一>是唯一可以和<Java编程思想>媲美的一本 Java 入门书.单从技术的角度来看,前者更好一些.但上升到思想层面嘛,自然后者更好,两者的偏重点不同. 思 ...

随机推荐

  1. 2.7-2.8 导入、导出数据(进/出)hive表的方式

    一.导入数据进hive表 1.语法 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (p ...

  2. 也谈Flash mmorpg地图问题【转】

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式:1.整图2.Tile元素拼装3.栅格化切片 整图 整图加载很好理解直接加载一张背景图.这 ...

  3. UVA - 11987 Almost Union-Find 并查集的删除

    Almost Union-Find I hope you know the beautiful Union-Find structure. In this problem, you're to imp ...

  4. IETester for IE11, IE10, IE9, IE8, IE7 IE 6 and IE5.5 on Windows 8 desktop, Windows 7, Vista and XP

    简介: IETester是一个免费的(用于个人和专业用途)WebBrowser,允许您在Windows 8桌面,Windows 7,Vista和XP上拥有IE11,IE10,IE9,IE8,IE7 I ...

  5. Codeforces Round #439 (Div. 2)C - The Intriguing Obsession(简单dp)

    传送门 题意 给出三个集合,每个集合的元素数量为a,b,c,现在需要连边,满足集合内元素不可达或最短路为3,求可行方案数 分析 设dp[i][j]为a集合元素为i个,b集合元素为j个的可行方案,易知( ...

  6. git 忽略 Pycharm 中的 workspace.xml 文件

    .gitignore 中要写上 workspace.xml 如果已经不幸之前commit workspace.xml 的话,必须执行以下命令 $ git rm --cached .idea/works ...

  7. P4609 [FJOI2016]建筑师(第一类斯特林数)

    传送门 没想到连黑题都会有双倍经验的 其实这题本质上是和CF960G Bandit Blues一样的,不过那里是要用分治FFT预处理第一类斯特林数,这里直接打表预处理第一类斯特林数就可以了 //min ...

  8. Hexo搭建博客教程(2) - 博客的简单个性化配置

    本章主要讲博客的个性化,譬如站点的基本配置(语言.头像.站点图标等).安装新的Hexo主题(NexT主题)以及主题的配置. 1. 修改站点配置 打开站点配置文件 ,找到: # Site title: ...

  9. Qt 进程和线程之一:运行一个进程和进程间通信

    Qt提供了对进程和线程的支持.本节讲述了怎样在Qt应用程序中启动一个进程,以及几种常用的进程间通信方法.如果对进程和线程的概念不是很了解,可以看我的另一篇博客:[多进程和多线程的概念. 设计应用程序时 ...

  10. [BZOJ3128]a+b Problem

    题解 最小割+主席树优化建图 首先看到每个点只有\(0/1\)两种状态就想到最小割 然后由于有一个限制是点\(i\)是黑点且有符合条件的白点就会减去\(p_i\) 所以我们将\(S\)集合设为黑点集合 ...