java中内部类和局部内部类有什么区别?

2024-03-25

如果一个类是本地内部类,这是否意味着它位于另一个类的方法内部,或者是否意味着它只是在某个地方的另一个方法中定义。

例如,在下面的代码中,MenuListener 是否被视为内部本地类?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MenuDemo extends JFrame{
private Container c;
private ImageIcon[] images = new ImageIcon[5];
private JLabel picture;
private JPanel mainPanel;
private JMenuBar menuBar;
private JMenu menu;
private JMenuItem bird,cat,dog,rabbit,pig;

public MenuDemo() {
    super("Menu Demo");

    c = getContentPane();
    c.setLayout(new BorderLayout());

    mainPanel = new JPanel();

    // Store the animal pictures in an array.
    for (int i=0; i<5; i++){
        images[i] = new ImageIcon("image" + i + ".gif");
    }
    //Set up the picture label.
    picture = new JLabel(images[0]);
    picture.setPreferredSize(new Dimension(177,122));
    mainPanel.add(picture, BorderLayout.CENTER);
    c.add(mainPanel);
    buildMenuBar();
    this.setJMenuBar(menuBar);
    pack();
    setVisible(true);
}

private void buildMenuBar(){
    MenuListener listener = new MenuListener();
    menuBar = new JMenuBar();

    menu = new JMenu("Animals");
    menu.setMnemonic(KeyEvent.VK_A);
    menuBar.add(menu);

    bird = new JMenuItem("Bird", KeyEvent.VK_B);
    bird.addActionListener(listener);
    menu.add(bird);

    cat = new JMenuItem("Cat", KeyEvent.VK_C);
    cat.addActionListener(listener);
    menu.add(cat);

    dog = new JMenuItem("Dog", KeyEvent.VK_D);
    dog.addActionListener(listener);
    menu.add(dog);

    rabbit = new JMenuItem("Rabbit", KeyEvent.VK_R);
    rabbit.addActionListener(listener);
    menu.add(rabbit);

    pig = new JMenuItem("Pig", KeyEvent.VK_P);
    pig.addActionListener(listener);
    menu.add(pig);
}

private class MenuListener implements ActionListener {
    public void actionPerformed(ActionEvent e){
        if (e.getSource() == bird)
            picture.setIcon(images[0]);
        else if (e.getSource() == cat)
            picture.setIcon(images[1]);
        else if (e.getSource() == dog)
            picture.setIcon(images[2]);
        else if (e.getSource() == rabbit)
            picture.setIcon(images[3]);
        if (e.getSource() == pig)
            picture.setIcon(images[4]);
    }
}

public static void main(String[] args){
    MenuDemo m = new MenuDemo();
    m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}   
}

根据一些官方的Oracle Java教程 http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html,局部内部类是在代码块中定义的类,而不是另一个类定义的一部分。这意味着在方法内部或初始化块中定义的类。

遵循该定义,MenuListener不是本地内部类——它只是一个内部类。

So:

public class Outer {

    public class Inner1 {
    }

    public static class Inner2 {
    }

    public void method(){

        class LocalInner{
        }

        LocalInner yesThisActuallyCompiles = new LocalInner();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中内部类和局部内部类有什么区别? 的相关文章

  • 如何在日期选择器中设置不在当前月份的单元格的样式

    我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1
  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐

  • Angular 2 和浏览器自动填充

    我正在使用 Angular 反应式表单实现登录页面 如果表单无效 登录 按钮将被禁用 import Component OnInit from angular core import FormBuilder FormGroup Valida
  • C++“重载”if() 语句

    是否有可能改变if 以便 class Foo int x Foo foo if foo 仅当价值x是不是零的东西 或者 到 int 的显式用户定义类型转换是否有效 这是一种合适的方法吗 或者 最好做类似的事情if foo getX 您可以通
  • PIL 图像到 QPixmap 转换问题

    今天我一直在努力应对这一挑战 我已经利用之前的帖子和其他资源成功地获得了很好的观点 我正在尝试将 PIL Image 转换为 QPixmap 以便可以在 PyQT GUI 上使用 QgraphicsScene 进行显示 但是当图片显示时颜色
  • 异常和SQLException之间的区别

    有人可以解释一下捕捉和捕捉之间的区别吗 Exception并抓住一个SQLException 我知道如果你选择打印异常错误 SQLException会打印出更多信息 但是还有其他的吗 try code catch Exception ex
  • 如何使用 Android MediaCodec 生成 AAC ADTS 基本流

    我正在尝试做的事情 使用 Android 的 MediaCodec 将原始 PCM 音频样本编码为原始 AAC 文件 我遇到的问题是 当我使用 FFMPEG 将生成的原始 AAC 文件打包到 M4A 容器中时 FFMPEG 抱怨文件中缺少编
  • 无法在 Samsung 上将数据库从版本“n”降级到“n-1”

    我有一个带有数据库的应用程序 使用标准 SQLiteOpenHelper 创建和打开 每当我升级数据库版本时 我也会升级应用程序的版本代码 因此数据库没有办法下降 数据库版本号总是增加 从不减少 我通过设置禁用了应用程序中的数据库备份and
  • PHP:=0D、=A20 符号

    从电子邮件正文获取信息后 我有很多符号 例如 0D A20 等 我该如何删除它们 我不想使用 body str replace A20 body 因为如果电子邮件正文确实包含该内容 它将被替换 有任何想法吗 谢谢 不要将它们替换为空 这些字
  • 在导航回 UINavigationController 堆栈中的上一个控制器之前向用户提示 UIAlertView

    我试图在导航到前一个控制器之前提示 UIAlertView 并在用户决定留在同一视图控制器上时阻止导航 使用CCT后退按钮操作助手 https github com weipin CCTBackButtonAction UIAlertVie
  • 翻转列表/元组的Pythonic方法[重复]

    这个问题在这里已经有答案了 翻转 列表 元组的最Python方式是什么 我所说的翻转的意思是 如果你有一个元组的元组 你可以使用像 tuple a b 这样的语法 翻转 它 这样你就可以执行 tuple b a 来获得相同的结果物品 一个例
  • TensorFlow - 显示会话中的所有变量

    我玩过一点 import tensorflow as tf x tf Variable 1 0 2 0 initializer tf global variables initializer session run initializer
  • ARM NEON:如何实现 256 字节查找表

    我正在使用内联汇编将我编写的一些代码移植到 NEON 我需要的一件事是将范围 0 128 的字节值转换为表中采用完整范围 0 255 的其他字节值 该表很短 但其背后的数学并不容易 因此我认为不值得每次 即时 计算它 所以我想尝试查找表 我
  • 如何在 tkinter 中获取条目的值?

    我正在尝试使用 Tkinter 的 Entry 小部件 我无法让它做一些非常基本的事情 返回输入的值 有谁知道为什么这么简单的脚本不会返回任何内容 我尝试了很多组合并研究了不同的想法 该脚本运行但不打印该条目 from Tkinter im
  • WPF C# 列表框外部滚动按钮

    您好 有一个列表框 我想要外部按钮来滚动列表框 我怎样才能实现这个目标 感谢您的帮助和示例 添加按钮点击处理程序 private void buttonUp Click object sender RoutedEventArgs e if
  • 干扰者:日记示例

    我对关于日志记录步骤的最常见 或推荐 disruptor 实现感到好奇 我最常见的问题是 它是如何实际实现的 通过示例 使用 JPA 明智吗 常用的数据库是什么 已经使用disruptor实施项目的社区 在中间处理程序 EventProce
  • Amazon S3 避免覆盖同名的对象

    如果我将文件上传到 S3 其文件名与存储桶中对象的文件名相同 则会覆盖该文件 有哪些选项可以避免覆盖具有相同文件名的文件 我在存储桶中启用了版本控制 认为这可以解决问题 但对象仍然被覆盖 我上面的评论不起作用 我以为WRITEACL 也适用
  • 如何从标准输入读取输入并强制编码?

    目标是不断地阅读stdin并强制执行utf8在Python2和Python3中 我尝试过以下解决方案 以与 python2 和 python3 兼容的方式将字节写入标准输出 https stackoverflow com questions
  • ER_CON_COUNT_ERROR:node-mysql 中连接过多错误

    我是节点初学者 以下是我尝试使用 Node mysql 执行的代码 但它一直给我这个错误 error connecting Error ER CON COUNT ERROR Too many connections CODE var siz
  • 在服务器上找不到 Git LFS 文件

    我们一直在使用 Git 和由我们自己的 Gitlab 实例托管的 git lfs 有时 当某个特定用户推送文件时 其中一些文件 似乎是 png 文件 不会进入 LFS 存储 而是添加到 git 中 当这种情况发生在他们的机器上时 我还无法看
  • 在 http 请求中使用 `retryWhen`

    我已经延长了Http类来设置默认标头并处理 angular2 应用程序内所有请求的错误 我想使用retryWhen 对某些错误重试请求 哪些错误应该retryWhen重试请求以及出现哪些错误时应停止 Injectable export cl
  • java中内部类和局部内部类有什么区别?

    如果一个类是本地内部类 这是否意味着它位于另一个类的方法内部 或者是否意味着它只是在某个地方的另一个方法中定义 例如 在下面的代码中 MenuListener 是否被视为内部本地类 import java awt import java a