当前位置: 首页 > news >正文

Java匿名内部类

文章目录

  • 前言
  • 一、使用匿名内部类需要注意什么?
  • 二、使用步骤
    • 匿名内部类的结构
    • 匿名内部类的实用场景
      • 1. 事件监听器
      • 2. 过滤器
      • 3. 线程
      • 4. 实现接口
      • 5.单元测试:
      • 6.GUI编程
      • 7.回调函数


前言

Java中的匿名内部类是一种可以在声明时直接创建对象的内部类。这种内部类没有名字,通常用来简化代码,特别是在定义事件处理程序和监听器方面非常有用。


一、使用匿名内部类需要注意什么?

需要注意的是,匿名内部类不能有构造函数,因为它没有名字。同时,匿名内部类可以访问外部类的成员变量和方法,但需要将这些成员声明为final或不可变类型。

二、使用步骤

匿名内部类的结构

首先,匿名内部类的结构通常包括以下几个部分:

  • 实现接口或继承父类(可选):匿名内部类可以实现一个接口或继承一个父类,用于定义该类的行为。

  • 类名(可选):由于匿名内部类没有名字,所以在声明匿名内部类的同时,可以指定一个类名。这个类名只是用于方便调试和查看代码,并不会影响实际运行。(一般由文件名+ $1 构成,可以用xx.getClassName()打印查看)

  • 类的主体(必须):匿名内部类的主体包括各种成员变量、方法、代码块等,用于实现该类的具体行为。 我们声明一个接口

interface MyInterface {void doSomething();
}

使用匿名内部类,我们可以这样实现:

public class MyClass {public static void main(String[] args) {MyInterface myObject = new MyInterface() {@Overridepublic void doSomething() {System.out.println("Doing something...");}};myObject.doSomething(); // 输出:"Doing something..."// 匿名内部类的名字  MyClass$1  xxx$1System.out.println(myObject.getClass());}
}

在这个例子中,我们创建了一个实现MyInterface接口的匿名内部类,并且在声明时就创建了一个对象。可以看到,创建对象时可以直接在接口名称后面添加一对大括号,然后在大括号中实现接口中的方法。接着,用getClass() 打印了jdk给匿名内部类的一个暂时的类名。

匿名内部类的实用场景

匿名内部类一般用于创建临时的、单次使用的对象,适用于创建简单的、实现接口或继承类的类。

以下是匿名内部类的实际应用场景:

1. 事件监听器

匿名内部类可以用于实现事件监听器。例如,当用户单击按钮时,可以创建一个匿名内部类,将其作为按钮的事件监听器,当监听到事件时,执行相关代码。

2. 过滤器

匿名内部类可以用于创建简单的过滤器。例如,当你需要筛选一组数据时,可以创建一个匿名内部类并重写 accept 方法进行筛选。

3. 线程

匿名内部类可以用于创建简单的线程。例如,在某个方法中需要启动一个新的线程,可以创建一个匿名内部类并重写 run 方法。

4. 实现接口

当需要快速创建实现某个接口的对象时,可以创建一个匿名内部类。

5.单元测试:

使用匿名内部类创建mock对象,可以为单元测试提供便利和减少代码量。

6.GUI编程

使用匿名内部类为组件添加事件处理器,可以将处理器代码直接加入到GUI代码中,使代码更加简洁易懂。

7.回调函数

使用匿名内部类作为回调函数,可以将逻辑放在匿名内部类中,而不需要额外的类。

总之,匿名内部类可以在需要快速创建临时对象的场景中提供更为便捷的实现方式。


相关文章:

Java匿名内部类

文章目录 前言一、使用匿名内部类需要注意什么?二、使用步骤匿名内部类的结构匿名内部类的实用场景1. 事件监听器2. 过滤器3. 线程4. 实现接口5.单元测试:6.GUI编程7.回调函数 前言 Java中的匿名内部类是一种可以在声明时直接创建对象的内部类。这种内部…...

Shiro和SpringSecurity的区别

文章目录 前言1.Shiro:Shiro的特点: 2.SpringSecurity:SpringSecurity特点: 3.对比:总结 前言 Shiro 和 Spring Security 都是用于在Java应用程序中实现身份验证(Authentication)和授权&#x…...

【STM32】学习笔记(OLED)

调试方式 OLED简介 硬件电路 驱动函数 OLED.H #ifndef __OLED_H #define __OLED_Hvoid OLED_Init(void); void OLED_Clear(void); void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); void OL…...

概念解析 | 认知雷达:有大脑的雷达

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:认知雷达。 认知雷达:有大脑的雷达 1.背景介绍 对于传统的雷达,它们通常都是预设定参数和模式来进行工作,比如发射功率、波形、扫描模式等。然而,这种方式面临着一些挑…...

B. Long Long

time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today Alex was brought array a1,a2,…,an�1,�2,…,�� of length n�. He can apply as m…...

CTFhub-文件上传-.htaccess

首先上传 .htaccess 的文件 .htaccess SetHandler application/x-httpd-php 这段内容的作用是使所有的文件都会被解析为php文件 然后上传1.jpg 的文件 内容为一句话木马 1.jpg <?php echo "PHP Loaded"; eval($_POST[a]); ?> 用蚁剑连接 http://ch…...

Python中的绝对和相对导入

在本文中&#xff0c;我们将看到Python中的绝对和相对导入。 Python中导入的工作 Python中的import类似于C/C中的#include header_file。Python模块可以通过使用import导入文件/函数来访问其他模块的代码。import语句是调用import机制的最常见方式&#xff0c;但它不是唯一的…...

C语言关于与运算符

C语言关于&与&&运算符 我们知道&#xff0c;在很多场景中&和&&通常可以相互代替&#xff0c;那么它们到底有什么不同呢&#xff1f; 先看一段代码 bool a, b, c; c a & b;使用clang -S编译出来的指令如下&#xff1a; movb -5(%rbp), %al …...

计算机网络(速率、宽带、吞吐量、时延、发送时延)

速率&#xff1a; 最重要的一个性能指标。 指的是数据的传送速率&#xff0c;也称为数据率 (data rate) 或比特率 (bit rate)。 单位&#xff1a;bit/s&#xff0c;或 kbit/s、Mbit/s、 Gbit/s 等。 例如 4 1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或…...

kubectl入门

一.kubectl的三种资源管理方式&#xff1a; 二. kubectl资源介绍&#xff1a; 1.namespace&#xff1a;实现多套环境的资源隔离或者多租户的资源隔离。k8s中的pod默认可以相互访问&#xff0c;如果不想让两个pod之间相互访问&#xff0c;就将其划分到不同ns下。 2.pod&#xff…...

Android JNI系列详解之ndk-build工具的使用

一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用&#xff0c;今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式&#xff1a; 如上图所示&#xff0c;第一种方式是Android.mkApplication.mkgradle的方式生成…...

【业务功能篇90】微服务-springcloud-检索服务-ElasticSearch实战运用-DSL语句

商城检索服务 1.检索页面的搭建 商品检索页面我们放在search服务中处理&#xff0c;首页我们需要在mall-search服务中支持Thymeleaf。添加对应的依赖 <!-- 添加Thymeleaf的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifa…...

QTday4

实现闹钟功能 1》 头文件 #ifndef BURGER_H #define BURGER_H#include <QWidget> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QTextEdit> #include <QTimerEvent> //定时器事件类 #include <QDateTim…...

设计模式之命令模式(Command)的C++实现

1、命令模式的提出 在软件开发过程中&#xff0c;“行为请求者”和“行为实现者”通常呈现一种“紧耦合”&#xff0c;如果行为的实现经常变化&#xff0c;则不利于代码的维护。命令模式可以将行为的请求者和行为的实现者进行解耦。具体流程是将行为请求者封装成一个对象&…...

取证工具prodiscover的基本操作

前言提醒 取证工具ProDiscover在网上讲解操作的文章实在太少&#xff0c;一是prodiscover是用于磁盘取证的工具&#xff0c;本身比较小众比不上其他的编程软件能用到的地方多&#xff0c;二是这个工具是用来恢复提取磁盘中被删除的文件&#xff0c;是比较隐晦的软件。 需要注…...

flutter plugins插件【二】【FlutterAssetsGenerator】

2、FlutterAssetsGenerator 介绍地址&#xff1a;https://juejin.cn/post/6898542896274735117 配置assets目录 ​ 插件会从pubspec.yaml文件下读取assets目录&#xff0c;因此要使用本插件&#xff0c;你需要在pubspec.yaml下配置资源目录 flutter:# The following line ens…...

看懂UML类图

UML 统一建模语言(Unified Modeling Language&#xff0c;UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言&#xff0c;是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具&#xff0c;独立于任何具体程序设计语言。 类的表示 首先看那个…...

keras深度学习框架通过简单神经网络实现手写数字识别

背景 keras深度学习框架&#xff0c;并不是一个独立的深度学习框架&#xff0c;它后台依赖tensorflow或者theano。大部分开发者应该使用的是tensorflow。keras可以很方便的像搭积木一样根据模型搭出我们需要的神经网络&#xff0c;然后进行编译&#xff0c;训练&#xff0c;测试…...

React 中的 ref 如何操作 dom节点,使输入框获取焦点

聚焦文字输入框 .focus() 获取焦点 当用户点击按钮时&#xff0c;handleClick 函数会被调用&#xff0c;从而将焦点聚焦到文本输入框上。 // 焦文字输入框 import { useRef } from "react";const FocusForm () > {const inputRef useRef<any>(null);func…...

最短路Dijkstra,spfa,图论二分图算法AYIT---ACM训练(模板版)

文章目录 前言A - Dijkstra Algorithm0x00 算法题目0x01 算法思路0x02 代码实现 B - 最长路0x00 算法题目0x01 算法思路0x02 代码实现 C - 二分图最大匹配0x00 算法题目0x01 算法思路0x02 代码实现 D - 搭配飞行员0x00 算法题目0x01 算法思路0x02 代码实现 E - The Perfect Sta…...

AK 微众银行 9.3 笔试 Java后端方向

T1(模拟,二分) (没看清买的糖果只有前缀&#xff0c;一开始用二分写了&#xff0c;后来意识到也没改了&#xff0c;简单写的话&#xff0c;直接模拟就好了) #include <bits/stdc.h>#define endl \nusing namespace std;const int N 50010;int n; int a[N];bool check(…...

了解java中的通配符“?“

目录 通配符的作用 先看一段代码 用通配符"?"后,代码变化 结论 通配符上界 通配符下界 对通配符上下界的注释理解及其练习代码 简记: ? 用于在泛型的使用&#xff0c;即为通配符. 在Java中&#xff0c;通配符&#xff08;wildcard&#xff09;主要用于泛型…...

浙大陈越何钦铭数据结构07-图6 旅游规划【最小堆实现】

题目&#xff1a; 题目和浙大陈越何钦铭数据结构07-图6 旅游规划是一样的&#xff0c;不同的是用最小堆实现函数【FindMinDist】。 时间复杂度对比&#xff1a; 浙大陈越何钦铭数据结构07-图6 旅游规划&#xff1a; 创建图&#xff08;CreateGraph&#xff09;&#xff1a;时…...

OpenShift 4 - 用 Prometheus 和 Grafana 监视用户应用定制的观测指标(视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.13 的环境中验证 文章目录 OpenShift 的监控功能构成部署被监控应用用 OpenShift 内置功能监控应用用 Grafana 监控应用安装 Grafana 运行环境配置 Grafana 数据源定制监控 Dashboard 演示视…...

【LeetCode】剑指 Offer <二刷>(3)

目录 题目&#xff1a;剑指 Offer 06. 从尾到头打印链表 - 力扣&#xff08;LeetCode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 07. 重建二叉树 - 力扣&#xf…...

Ceph IO流程及数据分布

1. Ceph IO流程及数据分布 1.1 正常IO流程图 步骤&#xff1a; client 创建cluster handler。client 读取配置文件。client 连接上monitor&#xff0c;获取集群map信息。client 读写io 根据crshmap 算法请求对应的主osd数据节点。主osd数据节点同时写入另外两个副本节点数据。…...

Netty-NIO

文章目录 一、NIO-Selector1.处理accept2.cancel3.处理read4.处理客户端断开5. 处理消息的边界6. 写入内容过多的问题7. 处理可写事件 一、NIO-Selector 1.处理accept //1.创建selector,管理多个channel Selector selector Selector.open(); ByteBuffer buffer ByteBuffer.…...

红外物理学习笔记 ——第三章

第三章 基尔霍夫定律&#xff1a;就是说物体热平衡条件下&#xff0c;发射的辐射功率要等于吸收的辐射功率 M α E M\alpha E MαE α \alpha α 是吸收率&#xff0c; M M M 是幅出度&#xff08;发射出去的&#xff09;&#xff0c; E E E是辐照度&#xff08;外面照过来的…...

使用 htmx 构建交互式 Web 应用

学习目标&#xff1a;了解htmx的基本概念、特点和用法&#xff0c;并能够运用htmx来创建交互式的Web应用程序。 学习内容&#xff1a; 1. 什么是htmx&#xff1f; - htmx是一种用于构建交互式Web应用程序的JavaScript库。 - 它通过将HTML扩展为一种声明性的交互式语言&a…...

S32K324芯片学习笔记

文章目录 Core and architectureDMASystem and power managementMemory and memory interfacesClocksSecurity and integrity安全与完整性Safety ISO26262Analog、Timers功能框图内存mapflash Signal MultiplexingPort和MSCR寄存器的mapping Core and architecture 两个Arm Co…...