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

时间:2022-12-25 14:51:45

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 }
java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
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());