java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
6.2 接口实例
6.2.1 接口与回调
在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘。
在构造定时器时,需要设置一个时间间隔,并告知定时器,当到达时间间隔时需要做些什么操作,(java将某个类的对象传递给定时器,然后的定时器调用这个对象的方法。)-----定时器需要知道调用了哪一个方法,并要求传递的对象所属的的类实现了java.awt.event包的ActionListener接口。
1 public interface ActionListener 2 { 3 void actionPerformed(ActionEvent event); 4 }
当到达指定的时间间隔时,定时器就调用actionPerformed方法。
接下来,构造这个类的一个对象,并将他传递给Timer构造器。
1 ActionListener listener =new TimePrinter(); 2 Timer t =new Timer(10000,listener);
下面程序给出了定时器和监听器的操作行为,在定时器启动以后,程序将弹出一个消息对话框,并等待用户点击OK按钮来终止程序的运行。定时时间为5秒;
1 package cc.openhome; 2 import java.awt.Toolkit; 3 import java.awt.event.ActionEvent; 4 import java.awt.event.ActionListener; 5 import java.util.Date; 6 import javax.swing.JOptionPane; 7 import javax.swing.Timer; 8 public class TimerTest { 9 public static void main(String[] args) { 10 ActionListener listener =new TimePrinter(); 11 Timer t=new Timer(5000,listener); 12 t.start(); 13 JOptionPane.showMessageDialog(null, "Quit program?"); 14 System.exit(0); 15 } 16 } 17 class TimePrinter implements ActionListener 18 { 19 public void actionPerformed(ActionEvent evet ) 20 { 21 System.out.println("At the tone ,the time is "+new Date()); 22 Toolkit.getDefaultToolkit().beep(); 23 } 24 }
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 秒)
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());