用java匿名类来简化调试

在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle)。但其实,它们对于debug也很有帮助。本文将介绍如何利用匿名类来简化你的debug。

  我们该如何调试那些非自己源码的方法调用呢?比方说,对Jbutton.setEnable()的调用。Java提供的匿名类,可以很好的解决这个问题。

public class MyButton extends JButton

  通常,当我们继承一个类时,我们可以通过提供新的方法来覆盖(override)该类中现有的方法:

  {
  public void setVisible( boolean visible )
  {
  // Rolling our own visibility

  }
  }
  在实例化(instantiate)MyButton类之后,任何对方法setVisible()的调用,都会调用上面代码中的setVisible()方法。可问题是,我们不想仅仅为了覆盖一个方法而继承整个类,尤其是所需的实例(instantiation)很有限的时候。匿名类使得我们能在实例化的同时覆盖方法。

  如果我们只想在某个JButton对象中加入我们自己的可视逻辑,那么我们可以在申明这个button对象的同时重写这个方法:

这段代码都做了什么?花括号({})中间的代码申明了setVisible()方法,并覆盖了JButton类中的那个,但这仅限于myButton对象。我们没有改变JButton类,也没有申明一个新类,我们仅给了一个特殊的JButton对象它自己的可视逻辑。

 JButton myButton = new JButton()
  {
  public void setVisible( boolean visible )
  {
  // Rolling our own visibility

  }
  };
 

  在面向对象术语中,myButton是一个从JButton类继承而来的无名,也就是匿名,类的对象。

  这种创建匿名类并同时覆盖方法的技术用在什么时候?假设你在编写一段Swing程序,在你向一个GUI物件(element)中添加一个event listener(假设叫作ActionListener)之前,你已经编写了一段这种机制的代码。现在,我们假设我们有个庞大的类,里面有很多按钮,但是有一个按钮时隐时现,你想知道为什么会出这样的异常情况,利用上面的代码并在setVisible()方法上设置断点。然后,当你运行你的程序时,你设置的断点就会在恰当的地方暂停程序。检查栈轨迹(stack trace),我们会发现没有按所预期的那样来调用setVisible()方法的原因并修复这个它。

  匿名类在debug类似这种源码不可得的类的时候很有用。即便在源码可得的情况下,在大量使用的方法(如setVisible)上设置断点,也是件很麻烦的事情,因为我们在每个实现了setVisible()方法的类的对象上都要转入断点。而匿名类可针对某个特定的对象进行“外科手术”式的debug。

数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践 Python实现模糊AHP(Fuzzy AHP) 阅读详情

相关推荐

学习利用ce修改游戏生命参数

易语言代码 游戏的简陋界面 用ce查找存储这个1000即生命值的内存地址(得先附加到目标程序上,点击左上角那个电脑按钮) 看到有很多值为1000的,但哪个是生命值呢?真相只有一个 我们点击一下打我这个按钮,看下面的ce界面上地址为004A65C0处的值变了,所以这个就是我们要找的生命值 接下来我们对生命值进行修改,修改为99

zsd747289639的博客 5万+

Java技巧:用匿名类来实现简化程序调试

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 475

别再手动抄表了!用MCGS触摸屏自动存数据到U盘,5分钟搞定报表导出

本文详细介绍了如何利用MCGS触摸屏实现工业数据自动记录与U盘导出,彻底告别传统手动抄表方式。通过昆仑通态MCGS系统,可构建零误差自动化报表系统,实现实时数据采集、双重备份及标准CSV格式导出,大幅提升数据准确性和工作效率。

weixin_30872157的博客 792

java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试

Java技巧:用匿名类来实现简化程序调试在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle)。但其实,它们对于debug也很有帮助。本文将介绍如何利用匿名类来简化你的debug。我们该如何调试那些非自己源码的方法调用呢?比方说,对Jbutton.setEnable()的调用。Java提供的匿名类,可以很好的解决这个问题。通常,当我们继承一...

weixin_29553791的博客 380

UE5.6使用ndisplay,单窗口多画面(单机部署),配置、打包流程,无需switchboard

摘要:本文介绍了在UE5.6中使用ndisplay插件的完整流程。首先需要开启ndisplay和launch插件,创建ndisplay配置文件并设置本地单窗口多画面模式。随后通过Process Explorer获取启动命令用于制作bat文件。打包项目时需删除场景中的ndisplay文件,但保留内容浏览器中的配置,并设置为开发版打包。最后将ndisplay文件导出为.ndisplay格式,与bat文件一起放置在打包目录下,通过bat启动程序。注意修改路径和窗口大小时需保持纯英文路径,且bat代码需保持单行格式

weixin_43912248的博客 977

GAMIT基线解算实战:从RINEX数据准备到精度报告解读(附2024年tables更新攻略)

本文详细解析了2024年GAMIT基线解算全流程,从RINEX数据准备到精度报告解读,特别更新了tables配置攻略。涵盖工程目录设计、数据预处理、关键配置文件更新及基线解算策略优化,帮助用户掌握高精度GNSS数据处理技术,提升解算效率和结果可靠性。

weixin_42520374的博客 305

《Java8实战》第9章 重构、测试和调试

如果你发现你需要频繁地从客户端代码去查询一个对象的状态(比如前文例子中的日志器的状态),只是为了传递参数、调用该对象的一个方法(比如输出一条日志),那么可以考虑实现一个新的方法,以 Lambda 或者方法引用作为参数,新方法在检查完该对象的状态之后才调用原来的方法。匿名类的类型是在初始化时确定的,而 Lambda 的类型取决于它的上下文,这样可能会使代码更加晦涩。但是为了代码的可读性,尽量使用方法引用。第3章讲过,就是前后的代码都是相同的,但是中间的代码不同,使用这种模式,可以减少代码的冗余。

weixin_39924752的博客 1048

Part03 数据结构

本文介绍了CSP-S初赛中常见的高级数据结构及其实现,包括: 线性结构:双端栈、双端队列、单调队列、优先队列和ST表,重点分析了它们的特点、时间复杂度及典型应用场景。 集合与森林:并查集(带路径压缩和按秩合并)和树的孩子兄弟表示法,展示了多叉树转化为二叉树存储的方法。 特殊树结构:包括二叉堆、树状数组、线段树和字典树,详细说明了它们的构建、查询和更新操作,特别强调了线段树的递归实现和字典树的前缀匹配特性。 每种数据结构都配有核心C++代码实现,涉及数组模拟、动态规划和树形结构等编程技巧,适合算法竞赛选手快速

weixin_43863957的博客 1179

Java中的Lambda表达式简化代码与提升效率的精妙艺术

而Lambda表达式通过`(参数) -> {表达式}`结构,可将相同功能缩减为1行:`() -> System.out.println(Hello)`。例如,使用`stream.filter(s -> s.length() > 5)`替代手动循环过滤,既减少代码量又利用内部优化机制。例如使用`Files.lines(path).forEach(System.out::println)`时,底层API会自动处理文件关闭,避免了try-with-resources的显式声明,既简化代码又降低资源泄漏风险。

rhengli的博客 384

双像素传感器的AI计算摄影实战:单目深度估计与图像去模糊的融合创新

本文介绍了双像素传感器技术在计算机视觉中的应用,包括深度估计、图像去模糊和图像重建等任务。双像素传感器通过两个子单元捕捉视差信息,使摄像头能够分析场景的三维结构和运动轨迹。文章以图像去模糊为例,详细展示了从数据准备到模型训练的完整流程,包括构建自定义数据集、设计双像素特征提取模块、训练去模糊模型及推理测试。通过模拟双像素的"双视角"信息融合,该AI算法能有效恢复模糊图像的清晰细节。

know_F0727的博客 255

RK平台PCIE-Ethernet扩展:Intel I210移植与性能飞升之路

本文详细介绍了Intel I210千兆以太网控制器在瑞芯微RK平台的移植与优化过程。通过硬件适配、内核配置、驱动开发及性能调优四个关键环节,实现了RK平台的网络性能提升。硬件方面,重点说明了PCIE接口的规范连接与供电检查;软件方面,系统阐述了内核配置、设备树修改和驱动编译流程。在性能优化环节,详细介绍了中断优化、缓冲区设置和TCP/IP协议栈调优策略,并采用Iperf和Netperf工具进行量化测试验证。测试结果显示,优化后的网络吞吐量提升20%以上,延迟降低40%,为工业控制、智能安防等场景提供了可靠的

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 350

Java中的匿名类

如题

ozawacai的博客 794

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 296

Java 8里面lambda的最佳实践

原文出处:oschina-成熟的毛毛虫 Java为何需要Lambda Lambda的应用场景 Lambda的性能 Lambda的阴暗面 总结Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事!在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了函数式编程的思想,我觉得优秀的程序员,有必要学习一下函数式编程

记录日常二三事 636

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java lambda教程_Lambda系列教材 (一)- Java Lambda 表达式教程

假设一个情景: 找出满足条件的Hero本教程将从使用普通方法,匿名类,以及Lambda这几种方式,逐渐的引入Lambda的概念步骤1:普通方法步骤2:匿名类方式步骤3:Lambda方式步骤4:设置eclipse以支持Lambda步骤5:从匿名类演变成Lambda表达式步骤6:匿名方法步骤7:Lambda的弊端步骤8:练习-Comparator步骤9:答案-Comparator步骤1:普通方法...

weixin_39897015的博客 405

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JAVA中级五 Lambda

文章目录Lambda01 Hello Lambda1.1 普通方法1.2 匿名类方式1.3 Lambda表达式1.4 匿名类演变Lambda表达式1.5 匿名方法1.6 Lambda弊端1.7 总结02 方法引用2.1 引用静态方法2.2 引用对象方法2.3 引用容器中对象的方法2.4 引用构造器03 聚合操作 Lambda 01 Hello Lambda 1.1 普通方法 public clas...

weixin_45814795的博客 633

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java lambda表达式详解

能对函数式接口起作用**。这很容易理解,如果一个接口有多个待实现的方法,Lambda表达式就不能分辨出它现在是对接口中哪个方法进行实现。

2301_76965813的博客 4473

Java自学-Lambda 概念

Java Lambda 表达式概念 假设一个情景: 找出满足条件的Hero 从使用普通方法,匿名类,以及Lambda这几种方式,逐渐的引入Lambda的概念 步骤 1 : 普通方法 使用一个普通方法,在for循环遍历中进行条件判断,筛选出满足条件的数据 hp>100 && damage<50 package lambda; import java.util.A...

我的博客 458

Lambda系列教材 (一)- Java Lambda 表达式教程

接着调用filter,传递这个checker进去进行判断,这种方式就很像通过Collections.sort在对一个Hero集合排序,需要传一个。3. 版本支持,Lambda表达式在JDK8版本中才开始支持,如果系统使用的是以前的版本,考虑系统的稳定性等原因,而不愿意升级,那么就无法使用。同样是调用filter方法,从上一步的传递匿名类对象,变成了传递一个Lambda表达式进去。Lambda比较适合用在简短的业务代码中,并不适合用在复杂的系统中,会加大维护成本。这几种方式,逐渐的引入Lambda的概念。

MAGIC_LAN的博客 339

JAVA——lambda

假设一个情景: 找出满足条件的Hero 本教程将从使用普通方法,匿名类,以及Lambda这几种方式,逐渐的引入Lambda的概念 普通方法 public class TestLambda { public static void main(String[] args) { Random r = new Random(); List&lt;Hero&gt...

Jae_Peng的博客 304

【Lambda表达式】

lambda表达式 public class TestLamdba { public static void main(String[] args) { Random r = new Random(); List<Hero> heros = new ArrayList<Hero>(); for (int i = 0; i < 5; i++) { heros.add(new Hero("hero "

weixin_58045939的博客 176

java之匿名类

最后,我们创建了该匿名类的实例,并调用了`greet`方法。匿名类(Anonymous Class)是Java中的一种特殊类,它没有显式的类名,通常用于创建临时的、一次性的类实例。匿名类通常是在创建接口实例、抽象类的子类实例、或者重写方法的实例时使用,以简化代码和提高代码的可读性。4. 局部性: 匿名类的作用域通常被限制在其创建的方法内部,这有助于保持代码的局部性和可读性,因为它们仅在需要的地方使用。1. 语法简洁: 匿名类的语法非常简洁,可以在需要的地方创建和使用类实例,而不必显式定义一个具名的类。

m0_73370205的博客 4232

Java内部类与匿名类的好处

匿名类(Anonymous inner classes) 是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。 这就要采用另一种形式的new语句,如下所示: new 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟

Bolt 的专栏 5980

26. 匿名类与 Lambda 表达式

Java匿名类简介 匿名类是一种没有显式名称的局部类,直接在对象创建时实现接口或继承抽象类。其特点包括:无类名、局部作用域、单次实例化、可访问外部变量(需final)及语法简洁性。基本语法为new 父类/接口(){实现代码},适用于事件监听、线程实现等场景。 使用场景与限制 常用于简化代码(如Swing事件监听)、临时实现接口(如Runnable)和回调函数。但存在可读性降低、无法复用、不能定义构造器等局限性。

weixin_43484713的博客 1312

Java内部类与匿名类的访问与Hook详解

在Java编程语言中,内部类是一种嵌套在其他类或方法内的类,它可以更紧密地封装数据,并且能够直接访问外部类的所有成员(包括私有)。而在特定场景下,如测试应用中,我们可能还会遇到匿名类,这是一种没有名称、直接实例化的内部类,通常用于简化代码并实现接口或继承类的功能。

beidideshu的博客 558
上一篇: 关于java的new对象问题
下一篇: Android基础 : Android Service
whatsyourname
博客等级 码龄23年 13粉丝 326原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值