Java内部类的使用与应用

HashMap.java

内部类的使用与应用

1. 内部类用法

  • 普通内部类
    • 实例化内部类对象需要先实例化外部类对象,然后再通过OuterClassName.new InnerClassName()方式实例化内部类。
    • 内部类对象在创建后会与外部类对象秘密链接,因此无法独立于外部类创建内部类对象。
    • 无法直接从外部类外部访问,需要使用OuterClassName.InnerClassName方式,例如Map.Entry
    • 内部类可以访问外围类的所有成员,包括私有成员。
    • 在内部类中可以使用OuterClassName.this来访问外围类对象。
public class A {
    public void f() {
        A.B b = A.new B();
        B b2 = new B();
    }

    public class B {
        void g(){
            System.out.println(A.this);
        }
    }

    public static void main(String[] args) {
        A a = new A();
        A.B b = a.new B();
    }
}
  • 匿名内部类
    • 在内部类的基础上减少了对class的定义,通过new关键字后跟一个接口或者基类,然后在类体中实现方法即可。
    • JVM会调用编译器生成的构造器来生成这个内部类对象。
    • 典型应用如java.util.Comparator
public class Main {
    public static void main(String[] args) {
        // 创建一个包含整数的列表
        List<Integer> numbers = new ArrayList<>();
        numbers.add(5);
        numbers.add(3);
        numbers.add(8);
        numbers.add(1);

        // 使用匿名内部类实现Comparable接口进行排序
        Collections.sort(numbers, new Comparable<Integer>() {
            @Override
            public int compareTo(Integer o) {
                return this.compareTo(o);
            }
        });

        // 输出排序后的列表
        System.out.println("排序后的列表:" + numbers);
    }
}
  • 静态嵌套类
    • 是一种静态内部类,不需要外围类对象来初始化。【静态嵌套类说到底就是一个静态类,只不过是其位置位于某个类的内部罢了】
    • 嵌套类可以有static数据和字段。
    • 可以访问外围类的静态成员,但不能访问外部类的非静态成员。
    • 可以作为接口的一部分,这样在接口中就可以用公用代码出现;。
    • 可以多重嵌套,访问所有外围类成员。
public class OuterClass {
    private static String outerStaticField = "Outer static field";

    // 静态嵌套类
    static class NestedStaticClass {
        void printMessage() {
            System.out.println("Message from nested static class: " + outerStaticField);
        }
    }

    public static void main(String[] args) {
        // 创建静态嵌套类的实例
        NestedStaticClass nestedStaticObj = new NestedStaticClass();

        // 调用静态嵌套类的方法
        nestedStaticObj.printMessage();
    }
}

2. 应用场景

Java内部类具有多种应用场景和用途:

  • 封装: 提高代码的可读性和可维护性,隐藏内部实现细节。
  • 实现多重继承: 内部类可以继承一个类并实现多个接口,实现多重继承的效果。
  • 简化回调函数的使用: 内部类可以作为回调函数的实现方式,简化代码结构。
  • 编写事件驱动程序: 通过内部类实现事件监听器接口,监听和处理外部类中发生的事件。
  • 编写线程代码: 简化多线程代码的编写,提高可读性和可维护性。
  • 访问外部类的私有成员: 内部类可以访问外部类的私有成员,实现封装和访问控制。
  • 字节码文件大小: 减少类文件编译后的字节码文件大小。
  • 闭包和回调: 实现Java版的闭包和回调。

这些应用场景在你的工作实践中是否有所涉及呢?期待你的分享和补充实例,让我们一起探讨如何更好地利用内部类来提高代码的质量和可维护性!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AutoSAR(基础入门篇)10.8-实验:模式管理

目录 一、配置BswM 二、配置唤醒源 三、配置ComM Users 四、配置BswM的通信控制 五、Service Mapping 首先备份上一次的工程&#xff0c;养成好习惯&#xff08;最好还是用Git&#xff0c;这次最后再安利一下Git这个神器&#xff09;。今天的实验异常的简单&#xff0c;基…

OpenCV Mat实例详解 六

本文将接着OpenCV Mat实例详解继续介绍OpenCV Mat类的操作符及公有成员函数。 Mat & operator Mat & operator (const Mat &m) 将一个Mat对象赋值个另一个Mat对象。 Mat & operator (const MatExpr &expr) 将一个Mat表达式值赋值给Mat对象 Mat & op…

docker打包当前dinky项目

以下是我的打包过程&#xff0c;大家可以借鉴。我也是第一次慢慢摸索&#xff0c;打包一个公共项目&#xff0c;自己上传。 如果嫌麻烦&#xff0c;可以直接使用我的镜像&#xff0c;直接跳到拉取镜像&#xff01; <可以在任何地方的服务器进行拉取> docker打包当前din…

【JMST】:二苄基甲苯作为LOHC加氢以及脱氢性能研究

二苄基甲苯作为液态有机氢载体加氢及其及其脱氢性能的参数研究 摘要&#xff1a;在低压系统下研究了二苄基甲苯&#xff08;H0-DBT&#xff09;的氢化特性。氢化实验在各种金属催化剂上进行&#xff0c;发现 Raney-Ni 催化剂的活性最高。实验均使用 10 克 DBT 和 1 克 Raney-Ni…

使用向量数据库pinecone构建应用04:混合搜索 Hybrid Search

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

halcon中的一维测量

一维测量 像点到点的距离&#xff0c;边缘对的距离等沿着一维方向的测量都属于1D测量范畴。Halocn的一维测量首先构建矩形或者扇形的ROI测量对象&#xff0c;然后在ROI内画出等距离的、长度与ROI宽度一致的、垂直于ROI的轮廓线&#xff08;profile line&#xff09;的等距线。…

CSP-J 2023 复赛第4题:旅游巴士

【题目来源】https://www.luogu.com.cn/problem/P9751https://www.acwing.com/problem/content/description/5313/【题目描述】 小 Z 打算在国庆假期期间搭乘旅游巴士去一处他向往已久的景点旅游。 旅游景点的地图共有 n 处地点&#xff0c;在这些地点之间连有 m 条道路。 其中…

AR汽车行业解决方案系列之2-远程汽修

在汽车行业中&#xff0c;AR技术的应用正悄然改变着整个产业链的运作方式&#xff0c;应用涵盖培训、汽修、汽车售后、PDI交付、质检以及汽车装配等&#xff0c;AR技术为多个环节都带来了前所未有的便利与效率提升。 安宝特AR将以系列推文的形式为读者逐一介绍在汽车行业中安宝…

第三方认证中心跳转

一、业务需求 由第三方认证中心将 token 放在 header (请求头) 中跳转系统&#xff0c;前端获取到第三方系统携带 header 中的 token。 二、 业务流程 模拟第三方应用 CUSTOM-USERTOKEN 是第三方的 tokenproxy_pass 是我们的前端地址 server {listen 12345;server_name loca…

MacOSX删除HBuilderX

1. 删除应用程序 如下图。MacOSX&#xff0c;打开访达&#xff0c;左侧点击应用程序&#xff0c;进入应用程序窗口&#xff0c;找到HBuilderX&#xff0c;右键菜单&#xff0c;点击移到废纸篓 2. 删除数据目录 打开操作系统终端&#xff0c;输入如下命令&#xff1a; open $H…

Jenkins详解

目录 一、Jenkins CI/CD 1、 Jenkins CI/CD 流程图 2、介绍 Jenkins 1、Jenkins概念 2、Jenkins目的 3、特性 4、产品发布流程 3、安装Jenkins 1、安装JDK 2、安装tomcat 3.安装maven 4安装jenkins 5.启动tomcat&#xff0c;并页面访问 5.添加节点 一、Jenkins CI/…

Vue3 学习笔记(Day4)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. Vue3 学习笔记&#xff08;Day1&#xff09; 2. Vue3 学习笔记&#xff08;Day2&…

网络原理 HTTP _ HTTPS

回顾 我们前面介绍了HTTP协议的请求和响应的基本结构 请求报文是由首行请求头空行正文来组成的 响应报文是由首行形影头空行响应正文组成的 我们也介绍了一定的请求头之中的键值对的属性 Host,Content-type,Content-length,User-agent,Referer,Cookie HTTP协议中的状态码 我们先…

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的多特征分类预测

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测 目录 SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍…

海外媒体推广通过5个发稿平台开拓国际市场-华媒舍

随着全球化的进程&#xff0c;国际市场对于企业的吸引力日益增加。进入国际市场并获得成功并非易事。海外媒体推广发稿平台成为了一种重要的营销手段&#xff0c;能够帮助企业在国际市场中建立品牌形象、传递信息和吸引目标受众。本文介绍了五个海外媒体推广发稿平台&#xff0…

数据结构-二分搜索树(Binary Search Tree)

一,简单了解二分搜索树 树结构: 问题:为什么要创造这种数据结构 1,树结构本身是一种天然的组织结构,就好像我们的文件夹一样,一层一层的. 2,树结构可以更高效的处理问题 二,二分搜索树的基础 1、二叉树 2,二叉树的重要特性 满二叉树 总结: 1. 叶子结点出现在二叉树的最…

数字热潮:iGaming 能否推动加密货币的普及?

过去十年&#xff0c;iGaming&#xff08;互联网游戏&#xff09;世界有了显著增长&#xff0c;每月有超过一百万的新用户加入。那么&#xff0c;这一主流的秘密是什么&#xff1f;让我们在本文中探讨一下。 领先一步&#xff1a;市场 数字时代正在重新定义娱乐&#xff0c;iG…

LeetCode 2476.二叉搜索树最近节点查询:中序遍历 + 二分查找

【LetMeFly】2476.二叉搜索树最近节点查询&#xff1a;中序遍历 二分查找 力扣题目链接&#xff1a;https://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/ 给你一个 二叉搜索树 的根节点 root &#xff0c;和一个由正整数组成、长度为 n 的数组 qu…

Java零基础 - 算术运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

基于Java+SSM+Jsp宿舍管理系统(源码+演示视频+包运行成功+Maven版)

您好&#xff0c;我是码农小波&#xff08;wei158888&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 ❤️ 1. 毕业设计专栏&#xff0c;毕业季咱们不慌&#xff0c;上千款毕业设计等你来选。 目录 1、项目背景 2、项目演示 3、使用技术 4、系统设计 …