目录
首先展示普通的两个类
package Test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
public class TimerTest {
public static void main(String[] args) {
// 创建一个 ActionListener 对象
ActionListener listener = new TimePrinter();
// 创建一个定时器对象,间隔为 1000 毫秒(即 1 秒),并将 ActionListener 对象作为参数传入
Timer t = new Timer(1000, listener);
// 启动定时器
t.start();
// 显示一个对话框,消息为 "Quit program?",并等待用户关闭对话框
JOptionPane.showMessageDialog(null, "Quit program?");
// 程序退出
System.exit(0);
}
}
// 实现 ActionListener 接口的类
class TimePrinter implements ActionListener {
// 实现 actionPerformed 方法,当触发事件时会执行该方法
public void actionPerformed(ActionEvent event) {
// 在控制台输出当前时间
System.out.println("At the tone, the time is " + new Date());
// 播放系统默认的提示音
Toolkit.getDefaultToolkit().beep();
}
}
转换到普通内部类
(复制这个TimePrinter类,TimerTest这个类的main主函数的下方)
注:复制到下方的时候需要将类加上static关键字(如下图)
package Test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
public class TimerTest {
public static void main(String[] args) {
// 创建一个 ActionListener 对象
ActionListener listener = new TimePrinter();
// 创建一个定时器对象,间隔为 1000 毫秒(即 1 秒),并将 ActionListener 对象作为参数传入
Timer t = new Timer(1000, listener);
// 启动定时器
t.start();
// 显示一个对话框,消息为 "Quit program?",并等待用户关闭对话框
JOptionPane.showMessageDialog(null, "Quit program?");
// 程序退出
System.exit(0);
}
// 实现 ActionListener 接口的类
static class TimePrinter implements ActionListener {
// 实现 actionPerformed 方法,当触发事件时会执行该方法
public void actionPerformed(ActionEvent event) {
// 在控制台输出当前时间
System.out.println("At the tone, the time is " + new Date());
// 播放系统默认的提示音
Toolkit.getDefaultToolkit().beep();
}
}
}
在转换到局部内部类
在上面代码块中的类,去掉static关键字,将其复制到main主函数当中。需要注意的时候此时这个类只存在于主函数当中。
如下
package Test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
public class TimerTest {
public static void main(String[] args) {
// 实现 ActionListener 接口的类
class TimePrinter implements ActionListener {
// 实现 actionPerformed 方法,当触发事件时会执行该方法
public void actionPerformed(ActionEvent event) {
// 在控制台输出当前时间
System.out.println("At the tone, the time is " + new Date());
// 播放系统默认的提示音
Toolkit.getDefaultToolkit().beep();
}
}
// 创建一个 ActionListener 对象
ActionListener listener = new TimePrinter();
// 创建一个定时器对象,间隔为 1000 毫秒(即 1 秒),并将 ActionListener 对象作为参数传入
Timer t = new Timer(1000, listener);
// 启动定时器
t.start();
// 显示一个对话框,消息为 "Quit program?",并等待用户关闭对话框
JOptionPane.showMessageDialog(null, "Quit program?");
// 程序退出
System.exit(0);
}
}
转换到匿名内部类
方法
原先是先创建了一个类对实现的接口中的方法进行重写,再new的对象。现在简化步骤直接去new那个实现的接口,然后对方法进行同样的重写——代码示例如下

package Test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
public class TimerTest {
public static void main(String[] args) {
// 创建一个 ActionListener 对象
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 在控制台输出当前时间
System.out.println("At the tone, the time is " + new Date());
// 播放系统默认的提示音
Toolkit.getDefaultToolkit().beep();
}
};
// 创建一个定时器对象,间隔为 1000 毫秒(即 1 秒),并将 ActionListener 对象作为参数传入
Timer t = new Timer(1000, listener);
// 启动定时器
t.start();
// 显示一个对话框,消息为 "Quit program?",并等待用户关闭对话框
JOptionPane.showMessageDialog(null, "Quit program?");
// 程序退出
System.exit(0);
}
}
此外,这里还可以写完lambda表达式的形式,代码量能够更少

文章展示了如何将一个独立的类转换为Java的内部类,包括普通内部类、局部内部类和匿名内部类。这个过程涉及到ActionListener接口的实现,用于定时器事件处理。最后,文章提到了使用Lambda表达式进一步简化代码的方式。
&spm=1001.2101.3001.5002&articleId=131906412&d=1&t=3&u=c6362a6da7e941d681deb4dae3f261bf)
2088

被折叠的 条评论
为什么被折叠?



