Java中的内部类、枚举

内部类、枚举

  • 内部类
    • 成员内部类
    • 静态内部类
    • 局部内部类(不重要)
    • 匿名内部类(重要)
      • 什么是匿名内部类
      • 使用场景
  • 枚举类
    • 什么是枚举类
    • 枚举类的特点
      • 枚举类提供的一些额外API
      • 拓展:抽象枚举
        • 使用枚举类实现单例设计模式
    • 常见应用场景

内部类

内部类是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。

场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。

如:汽车里面有一个发动机,就可以把发动机类定义在汽车类里面

内部类有四种形式:

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

成员内部类

是类中的一个普通成员,类似普通的成员变量、成员方法。
在这里插入图片描述
成员内部类的成分都有:成员变量(普通、静态static成员「JDK16才开始支持」)、成员方法

访问成员内部类的方法:内部类依赖于外部类

Outer.Inner in = new Outer().new Inner();

成员内部类中访问其他成员的特点:

  1. 成员内部类可以直接访问外部类的实例成员、静态成员;
  2. 当如果内部类和外部类中有相同名称的变量,使用格式:外部类名.this
    在这里插入图片描述

静态内部类

有static修饰的内部类,属于外部类自己持有
在这里插入图片描述
静态内部类的成分:类有的它都有

访问静态内部类的方法:由于是静态可以直接用.调用出来

Outer.Inner in = new Outer.Inner();

静态内部类中访问其他成员的特点:

  1. 成员内部类只能直接访问外部类的静态成员,不能直接方法外部类的实例成员;
    在这里插入图片描述

局部内部类(不重要)

局部内部类是定义在方法中、代码块中、构造器等执行体中
在这里插入图片描述

匿名内部类(重要)

什么是匿名内部类

一种特殊的局部内部类;所谓匿名:指的是不需要为这个类声明名字
在这里插入图片描述
在这里插入图片描述

编译器遇到匿名内部类:

  1. 特点:把这个匿名内部类编译成一个子类,然后会立即创建一个类对象出来
  2. 作用:用于更方便的创建一个子类对象

在这里插入图片描述左边是Java类代码,右边是编译后的class文件

使用场景

通常作为一个参数传输给方法
在这里插入图片描述
可以改写为:直接在调用函数的时候创建匿名内部类
在这里插入图片描述

在这里插入图片描述

枚举类

什么是枚举类

是一种特殊的类:是一种固定数量的类
在这里插入图片描述
枚举类中的第一行,只能写一些合法的标识符(名称),多个名称用逗号隔开;
这些名称,本质是常量,每个常量都会记住枚举类的一个对象。

反编译可以看到
在这里插入图片描述

在这里插入图片描述

枚举类的特点

在这里插入图片描述

  • 枚举类的第一行只能罗列名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
  • 枚举类的构造器都是私有的(写不写都只是私有的),因此,枚举类对外不能创建对象。
  • 枚举类都是最终类,不可以被继承
  • 枚举类中,从第二行开始,可以定义类的其他各种成员
  • 编译器为枚举类新增类几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法

枚举类提供的一些额外API

在这里插入图片描述

拓展:抽象枚举

在枚举中添加了一个抽象方法
在这里插入图片描述
构建对象的时候要重写抽象方法

使用枚举类实现单例设计模式

在这里插入图片描述

常见应用场景

用来表示一组信息,然后作为参数进行传输。
做信息标志和分类
在这里插入图片描述

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

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

相关文章

thinkphp6.0的workerman在PHP8.0下报错

一、我先升级了thinkphp6.0到最新版本: composer update topthink/framework二、结果提示我composer版本过低,需要升级到2,于是我又升级了composer composer self-update 三、我又升级了workerman: composer require topthink/think-work…

Unity 获取当前日期的短时间和处于早中午晚哪个时间段

在我们手机中我们总会看到下图所示的时间,时间段当前时间,假如我们要实现这个效果应该怎么做呢。 首先是使用DateTime.Now获取当前时间: // 获取当前时间DateTime currentTime DateTime.Now; 其次由当前时间获取短时间,可以使用…

Intel FPGA 技术开放日

概要 时间:2023.11.14 全天 ( 9:00 - 16: 20) 地点:北京望京. 凯悦酒店 主题内容:分享交流了Intel FPGA 产品技术优势和落地实践方案。 会议的议程 开场致词: FPGA业务,是几年前intel收购而…

虚拟机安装centos7系统步骤

1、下载系统镜像文件 下载地址:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso 2、鼠标右键点击虚拟机-->设置-->CD/DVDD-->使用ISO映像文件-->点击浏览,选择文件,而后保存设置 3、点…

如何使用Docker将.Net6项目部署到Linux服务器(二)

目录 二 安装Redis 2.1 基本安装 2.1.1 下载Redis 2.1.2 解压并安装Redis 2.1.3 编译Redis 2.1.3 配置config文件 2.1.4 配置redis服务 2.1.5 关闭redis服务 2.2 Docker安装 2.2.1 拉取镜像 2.2.2 查看镜像 2.2.2 创建挂载目录 2.2.3 创建配置文件 2.2.4 创建容器…

PortSwigger Access Control

lab1: Unprotected admin functionality 访问robots.txt 进了删除即可 lab2: Unprotected admin functionality with unpredictable URL 访问admin-d0qwj5 lab3: User role controlled by request parameter 发现Cookie中存在判断是否为admin lab4: User role can be modifie…

gitattributes配置文件的作用

0 Preface/Foreword 0.1 基本概念 Git版本管控工具功能强大,在使用过程中,在多人合作的项目开发过程中,经常会遇到提交代码时出现的warning提醒,尤其是换行符。 Linux/Unix/Mac OS操作系统的换行符使用LF符号(\n&am…

逆向P1P2总结

字节八位 word 16位 deword 32 位 00 00 00 e8 是存储32位信息的起点 不是程序运行的起点 为什么电脑有32位与64位之分 寻址宽度 以字节为单位 0xfffffff 1 就是最大容量 转为十进制为 4294967296 / 1024 (k)/1024 (kb)/ 1…

web功能实例 - Canvas裁剪工具

嗯,手撸官方文档2天,发现没啥用,尤其是动画,那种计算出来的,根本想不到。因此学着学了抱着要做个东西的想法,去网上找相关案例,最终做出了这个裁剪工具。 PS :先说一下思路: 核心实现有3个canvas图层, 其中一个负责图片的预览。另外2个叠加到…

【华为机试】2023年真题B卷(python)-发广播

一、题目 题目描述: 某地有N个广播站,站点之间有些有连接,有些没有。有连接的站点在接受到广播后会互相发送。 给定一个N*N的二维数组matrix,数组的元素都是字符’0’或者’1’。 matrix[i][j]‘1’,则代表i和j站点之间有连接,mat…

web前端游戏项目-辨色大比拼【附源码】

web前端游戏项目-辨色大比拼【附源码】 《辨色大比拼》是一个旨在测试和提升玩家颜色识别能力的在线游戏。在游戏中,玩家将通过辨识颜色来解谜并推进游戏进程。辨色大比拼也是一个寓教于乐的游戏,它不仅提供了一个有趣的辨色挑战,还能帮助玩…

leetcode2两数加和问题(链表)

题目思路: ①创建一个int类型的局部变量,用来存储两个结点的Val值。 ②判断该Val值与10求余(mod)后是否大于0,如果大于0, 则需要在下一个结点进位。 ③最关键的步骤:实现l1,l2结点数值相加后构建新的存储求和后的结点&#xff0…

IntelliJ IDEA插件

插件安装目录&#xff1a;C:\Users\<username>\AppData\Roaming\JetBrains\IntelliJIdea2021.2\plugins aiXcoder Code Completer&#xff1a;代码补全 Bookmark-X&#xff1a;书签分类 使用方法&#xff1a;鼠标移动到某一行&#xff0c;按ALT SHIFT D

修改PCIE 设备控制寄存器DevCtl2参数

如何修改PCIE 设备控制寄存器DevCtl2参数&#xff1f; 参考书籍&#xff1a;PCI_Express_Base_Spec 如图所示&#xff1a;输入Lspci -s 00&#xff1a;08&#xff1a;00 -vvv|grep - i deve 输出DevCap、DevCtl、DevCap2、DevCtl2参数&#xff0c;本节重点分析UEFI BIOS怎么设置…

FPGA分频电路设计(2)

实验要求&#xff1a; 采用 4 个开关以二进制形式设定分频系数&#xff08;0-10&#xff09;&#xff0c;实现对已知信号的分频。 类似实验我之前做过一次&#xff0c;但那次的方法实在是太笨了&#xff1a; 利用VHDL实现一定系数范围内的信号分频电路 需要重做以便将来应对更…

JUC并发编程 09——队列同步器AQS

目录 一.Lock接口 1.1Lock的使用 1.2Lock接口提供的 synchronized 不具备的主要特性 1.3Lock接口的所有方法 二.队列同步器(AQS) 2.1队列同步器的接口与示例 2.2AQS实现源码分析 ①同步队列 ②获取锁 ③释放锁 一.Lock接口 说起锁&#xff0c;你肯定会想到 synchron…

Android Studio 如何实现软件英文变中文教程

目录 前言 一、确认版本号 二、下载汉化包 三、汉化包安装 四、如何实现中英文切换 五、更多资源 前言 Android Studio是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发Android应用程序。默认情况下&#xff0c;Android Studio的界面和…

js中Math.min(...arr)和Math.max(...arr)的注意点

当arr变量为空数组时&#xff0c;这两个函数和不传参数时的结果是一样的 Math.max() // -Infinity Math.max(...[]) // -InfinityMath.min() // Infinity Math.min(...[]) // Infinity

如何编写高效清晰的嵌入式C程序

作为嵌入式工程师&#xff0c;怎么写出效率高、思路清晰的C语言程序呢? 要用C语言的思维方式来进行程序的构架构建 要有良好的C语言算法基础&#xff0c;以此来实现程序的逻辑构架 灵活运用C语言的指针操作 虽然看起来以上的说法很抽象&#xff0c;给人如坠雾里的感觉&…

内存之-LeakCanary

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用四、原理分析4.1 自动初始化4.1.1 初始化…