You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java新手提问:匿名类实现Runnable的代码形式是怎样的?

关于匿名类实现Runnable的完整形式解析

嘿,作为Java新手完全不用拘谨呀!我来给你把匿名类实现Runnable的完整逻辑拆解得明明白白~

你代码里用的new Runnable() { ... }就是匿名内部类的写法,它本质是创建一个实现了Runnable接口的类的实例,只是这个类没有单独的类名,直接在代码里完成定义+实例化的操作。

先看完整的“非匿名”实现形式

如果把这个匿名类拆成普通的命名类,完整的实现逻辑是这样的:

// 第一步:定义一个实现Runnable接口的命名类
class LibraryInitRunnable implements Runnable {
    // 必须重写Runnable接口唯一的抽象方法run()
    @Override
    public void run() {
        try {
            Library.frame = new Library();
            Library.frame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// 第二步:在main方法中使用这个类
public class Library extends JFrame {
    static Library frame;
    private JPanel contentPane;
    public static void main(String[] args) {
        EventQueue.invokeLater(new LibraryInitRunnable());
    }
}

对应到你的匿名类写法

你代码里的匿名类写法,其实是把上面的命名类定义和实例化合并成了一步,省去了给类起名字的环节,展开来看的完整匿名类结构就是你写的这样(核心就是把命名类的内容直接塞进new Runnable()后的大括号里):

EventQueue.invokeLater(new Runnable() {
    // 强制重写Runnable的run()方法
    @Override
    public void run() {
        try {
            frame= new Library();
            frame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

额外补充个简化写法

因为Runnable是函数式接口(只有一个抽象方法),你还可以用更简洁的Lambda表达式替代匿名类,功能完全一致:

EventQueue.invokeLater(() -> {
    try {
        frame= new Library();
        frame.setVisible(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
});

内容的提问来源于stack exchange,提问作者Squeez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:31:25