Java学习--Interface, inner class, anonymous inner class, lambda实例比较

本文通过对比分析,展示了如何使用Java接口、内部类、匿名内部类和lambda表达式来实现相同的功能:每秒打印一条消息并显示对话框。详细探讨了各自的应用场景和语法特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过接口,内部类,匿名内部类,lambda表达式实现一个相同的例子,该例子输出每隔一秒钟输出一条打印语句,同时弹出一个对话窗口,点击OK键,则程序退出。

Interface

TimerTest.java

package timer;

import java.awt.event.ActionListener;

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(10000, listener);
		t.start();
		JOptionPane.showMessageDialog(null, "Quit program?");
		System.exit(0);
	}
}

TimerPrinter.java

package timer;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

public class TimePrinter implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("At the tone, the time is " + new Date());
		Toolkit.getDefaultToolkit().beep();
	}

}
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------

InnerClass

InnerClassTest.java

package innerClass;

import javax.swing.JOptionPane;

public class InnerClassTest {
	public static void main(String[] args) {
		TalkingClock clock = new TalkingClock(1000, true);
		clock.start();
		JOptionPane.showMessageDialog(null, "Quit program?");
		System.exit(0);
	}
}

TalkingClock.java

package innerClass;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.Timer;

public class TalkingClock {
	private int interval;
	private boolean beep;
	public TalkingClock(int interval, boolean beep) {
		this.interval = interval;
		this.beep = beep;
	}
	public void start() {
		ActionListener listener = new TimePrinter();
		Timer t = new Timer(interval, listener);
		t.start();
	}
	public class TimePrinter implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			System.out.println("At the tone, the time is "  + new Date());
			if (beep) Toolkit.getDefaultToolkit().beep();
		}
		
	}
}

----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------

AnonymousInnerClass

AnonymousInnerClassTest.java

package anonymousInnerClass;

import javax.swing.JOptionPane;

public class AnonymousInnerClassTest {
	public static void main(String[] args) {
		TalkingClock clock = new TalkingClock();
		clock.start(1000, true);
		JOptionPane.showMessageDialog(null, "Quiz program?");
		System.exit(0);
	}
}

TalkingClock.java

package anonymousInnerClass;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.Timer;

public class TalkingClock {
	public void start(int interval, boolean beep) {
		ActionListener listener = new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				System.out.println("At the tone, the time is " + new Date());
				if (beep) Toolkit.getDefaultToolkit().beep();
			}
		};
		Timer t = new Timer(interval, listener);
		t.start();
	}
}
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------

Lambda

LambdaClockTest.java

package lambdaClock;

import javax.swing.JOptionPane;

public class LambdaClockTest {
	public static void main(String[] args) {
		LambdaClock clock = new LambdaClock();
		clock.start(1000, true);
		JOptionPane.showMessageDialog(null, "Quiz program?");
		System.exit(0);
	}
}

LambdaClock.java

package lambdaClock;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.Timer;

public class LambdaClock {
	public void start(int interval, boolean beep) {
		Timer t = new Timer(interval, event ->
		{
			System.out.println("At the tone, the time is " + new Date());
			if (beep) Toolkit.getDefaultToolkit().beep();
		});
		t.start();
	}
}

注:Lambda是jdk 1.8新增加的功能,在jdk 1.7中会编译错误。

输出:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值