Java学习笔记009——局部内部类(需配合接口使用)

局部内部类(Local Inner Classes)在Java中是一种非常有用的特性,尽管它们的使用场景相对较少。局部内部类定义在一个方法、构造器或代码块中,而不是在类的顶层。这样的设计有几个主要的意义:

1. 代码组织:局部内部类可以将逻辑紧密相关的代码组合在一起。由于局部内部类定义在它们被使用的地方附近,因此这使得代码更加紧凑和易于理解。

2. 访问控制:局部内部类可以直接访问其包含作用域(即定义它的方法或代码块)的局部变量,即使这个局部变量是`final`的。这提供了一种方式来操作包含作用域的数据,而无需将数据暴露给外部类。

3. 避免冗余:有时,一个内部类只需要在一个方法内部使用一次,这时将其定义为一个局部内部类而不是一个嵌套类(nested class)或静态内部类(static inner class)可以避免不必要的冗余和污染类的命名空间。

4. 上下文相关:局部内部类特别适合于表示与其外部代码块紧密相关的某种上下文。例如,你可能有一个方法需要处理多种不同的算法,每种算法可能需要不同的辅助类。在这些情况下,局部内部类可以方便地为每种算法提供专用的辅助逻辑。

5. 增强封装性:局部内部类可以提供比匿名内部类(anonymous inner classes)更强的封装性,因为它们具有名称,并且可以通过构造函数接收参数。这使得它们更适合于需要更复杂逻辑的场景。

6. 灵活性:局部内部类允许在代码的不同部分定义具有相同名称的内部类,因为它们的可见性仅限于它们的定义作用域。这提供了更大的灵活性,允许你在不同的上下文中重用内部类的名称。

下面是一个使用局部内部类的简单示例:

package com.test;/*** 定义一个接口Speaker*/
interface Speaker{void speak();
}/*** 定义外部类LocalInnerClass演示内部成员方法内定义局部内部类*/
public class LocalInnerClass {Speaker getSpeaker(String str) {// 在成员方法中定义一个局部内部类MySpeaker,这个类实现接口Speakerclass MySpeaker implements Speaker {public void speak() {System.out.println(str); //在局部内部类中,Java允许访问所在方法内的变量,比如访问传入的参数str}}return new MySpeaker();}public static void main(String[] args) {LocalInnerClass lic = new LocalInnerClass();lic.getSpeaker("局部内部类的实现与使用演示。").speak();}
}

分析上面代码main方法中的调用过程,可以更好的理解局部内部类的实现与使用:

(1)创建LocalInnerClass类的实例对象lic

(2)调用lic的getSpeaker方法,传入实参“局部内部类的实现与使用演示。”字符串,赋值给形参str。

(3)getSpeaker方法返回Speaker接口类型对象,该方法结束,Java会清理该方法所在的栈空间,形参str被清理。

(4)调用Speaker对象的speak方法,这个方法在局部内部类中实现,输出getSpeaker方法中的形参str的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【产品文档分类及撰写路径】

一、产品文档的分类 产品文档根据所处阶段和面相对象的差异大致可以分为三类: 商业需求文档 (BRD):商业需求文档是面向公司高层和项目组,目的是为了获得资金、资源支持。市场需求文档 (MRD):市场需求文档是面向运营和市场销售人员…

【重要!!退税!退税!】一年一度个人所得税综合年度汇算开始了!

目录标题 如何退税?2023年度个人所得税综合所得汇算清缴操作指南汇算准备标准申报 退税骗局?1.“您有一笔退税待领取”骗局2.“专业人员帮你多退税”骗局3.“诱导填报虚假个税信息”骗局4.“税务稽查人员联系你”骗局 如何退税? 2023年度个人…

2024年腾讯云优惠政策_腾讯云服务器特价购买活动入口

腾讯云优惠活动2024新春采购节活动上线,云服务器价格已经出来了,云服务器61元一年起,配置和价格基本上和上个月没什么变化,但是新增了8888元代金券和会员续费优惠,腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

网络编程作业day7

作业项目&#xff1a;基于UDP的聊天室 服务器代码&#xff1a; #include <myhead.h>//定义客户信息结构体 typedef struct magtye {char type; //消息类型char name[100]; //客户姓名char text[1024]; //客户发送聊天信息 }msg_t;//定义结构体存储…

类的关系 继承(Inheritance)、聚合(Aggregation)和关联(Association)

前言 在面向对象编程中&#xff0c;类之间的关系主要有以下几种&#xff1a;继承&#xff08;Inheritance&#xff09;、聚合&#xff08;Aggregation&#xff09;和关联&#xff08;Association&#xff09;。每种关系在对象的创建和销毁时&#xff0c;构造函数和析构函数的调…

刷题日记:面试经典 150 题 DAY5

刷题日记&#xff1a;面试经典 150 题 DAY4 125. 验证回文串28. 找出字符串中第一个匹配项的下标151. 反转字符串中的单词6. Z 字形变换68. 文本左右对齐 125. 验证回文串 原题链接 125. 验证回文串 双指针&#xff0c;一前一后&#xff0c;遇到非数字字母跳过即可 class So…

腾讯云哪款服务器最便宜划算?2024腾讯云服务器优惠价格表

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

TCP三次握手四次挥手

目录 TCP报文 ☞ 标志位 TCP状态变迁图&#xff1a; 三次握手 为什么要三次握手&#xff1f; 客户端与服务端接口状态 客户端&#xff1a; 服务端&#xff1a; 第一次握手&#xff1a; 第二次握手&#xff1a; 第三次握手&#xff1a; 四次挥手&#xff1a; 四次挥…

火爆全网,软件测试数据库常用 SQL 语句总结,你要的我都有......

前言 直接上干货 数据定义语言(DDL) 主要负责数据库、数据表、视图、键、索引等结构化的操作 常用的语句有&#xff1a;CREATE DATABASE、CREATE TABLE、ALTER TABLE等 字段的常用约束有&#xff1a;PRIMARY KEY、FOREIGN KEY、NOT NULL、UNIQUE、AUTO_INCREMENT、DEFAULT 常…

onnx模型优化利器onnxoptimizer、onnxsim

ONNX性能优化和调试技巧 - 知乎ONNX模型是一种跨平台、跨框架的模型表示格式,允许用户在不同的深度学习框架之间共享模型和数据,从而加速模型开发和部署。然而,在实际应用中,我们通常需要对ONNX模型进行性能优化和调试,以确保其在不同硬件和…https://zhuanlan.zhihu.com/…

PTA L2-011 玩转二叉树

给定一棵二叉树的中序遍历和前序遍历&#xff0c;请你先将树做个镜面反转&#xff0c;再输出反转后的层序遍历的序列。所谓镜面反转&#xff0c;是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式&#xff1a; 输入第一行给出一个正整数N&…

android 快速实现 圆角矩形控件 及 圆形控件

1.自定义RoundImageView package com.examle.widget;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import an…

CIP通讯介绍(欧姆龙PLC)

什么是CIP CIP通信是Common Industrial Protocl(CIP)的简称&#xff0c;它是一个点到点的面向对象协议&#xff0c;能够实现工业器件&#xff08;传感器&#xff0c;执行器&#xff09;之间的连接&#xff0c;和高等级的控制器之间的连接。目前&#xff0c;有3种网络DeviceNet…

MySQL--优化(索引--索引创建原则)

MySQL–优化&#xff08;索引–索引创建原则&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 一、索引创建原则 我们使用的索引种类&#xff1a; 主键索引唯一索引根据业务创建的索引&#xff08;复…

怎么给视频活码加入时间设置?限时扫码看视频的制作方法

视频二维码是常见的一种二维码类型&#xff0c;很多人会通过这种方式来分享视频内容&#xff0c;可能某些情况下需要对制作的二维码图片加入扫码限制&#xff0c;比如有效期、填写密码、限制预览时间等设置&#xff0c;那么这些需求怎么在生成二维码时实现呢&#xff1f; 对于…

JAVA 用二分法查找数组中是否存在某个值

二分法查找的概念 二分查找也称折半查找&#xff08;Binary Search&#xff09;&#xff0c;它是一种效率较高的查找方法。首先&#xff0c;将表中间位置记录的关键字与查找关键字比较&#xff0c;如果两者相等&#xff0c;则查找成功&#xff1b;否则利用中间位置记录将表分成…

软考67-上午题-【面向对象技术2-UML】-UML简介

一、UML简介 1-1、UML的定义 UML——统一建模语言。 能够表达软件设计中的动态、静态信息。 交互图&#xff1a;表达动态信息&#xff1b; 静态图&#xff1a;表达静态信息。 1-2、UML由3个要素构成&#xff1a; UML的基本构造块&#xff1b;&#xff08;仅讨论此要素&…

spring-security 项目实战(一)个人健康档案

spring-security 项目实战&#xff08;一&#xff09;个人健康档案 项目说明项目地址框架信息 代码分析配置类解析默认登录页登录接口执行逻辑登录认证成功之后重定向到main页面过程未登录之前访问 /main生成默认登录页点击登录 登录之后访问 /main执行流程清空认证信息 项目来…

低空经济20人|卓翼智能任雪峰:以技术驱动市场,引领无人机细分领域创新

作为国内系留无人机领域的领头羊企业&#xff0c;卓翼智能致力于提供智能无人系统解决方案。本期“低空经济20人”请到卓翼智能CEO任雪峰分享他对系留无人机研发应用的经验以及未来无人机行业生态发展的观点。 如今&#xff0c;无人机的应用场景逐渐广泛&#xff0c;在社会发展…

python的http服务的使用

在Python中&#xff0c;你可以使用内置的 http.server 模块来创建一个简单的HTTP服务器。这个模块提供了一个轻量级的HTTP服务器&#xff0c;适用于开发和调试。以下是一个简单的例子&#xff1a; # Python 3.x from http.server import SimpleHTTPRequestHandler from sockets…