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

在这里插入图片描述

拓展:抽象枚举

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

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

在这里插入图片描述

常见应用场景

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

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

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

相关文章

部署谷歌的Gemini大模型

前言 本文将介绍如何使用Docker、Docker-Compose私有化部署谷歌的Gemini大模型,以及没有服务器的情况下如何使用Vercel来部署。 Demo: 使用新加坡云服务器部署:Gemini Pro Chat (snowice.eu.org) 使用Vercel部署:Gemini Pro Chat (snowice.eu…

【美团大数据面试】Java面试题附答案

目录 1.多线程代码示例 2.单例代码示例 3.LinkedBlockingQueue原理解析 4.模板设计模式讲解 5.生产者-消费者队列设计方法 6.堆内存和栈内存的区别 7.ThreadLocal底层机制 8.synchronized原理,存在的问题,解决方案 9.volatile使用场景和原理&am…

一篇讲透:箭头函数、普通函数有什么区别

前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 目录 什么是箭头函数 箭头函数和普通函数的区别 更简洁的语法 箭头函数…

【WPF.NET开发】数据绑定应用场景

目录 1、实现属性更改通知 示例 2、双向绑定​​​更新源 示例 3、对分层数据使用主-从模式 示例 4、对分层 XML 数据使用主-从模式 示例 5、绑定两个控件的属性 示例 6、创建和绑定到 ObservableCollection 示例 7、使用 XMLDataProvider 和 XPath 查询绑定到 XML…

Java@RequestParam注解和@RequestBody注解接收参数

目录 Java后端接收数据 第一章、后端不写任何注解情况下接收参数1.1)后端不写注解postman发出get请求1.2)后端不写注解postman发出post请求 第二章、后端写RequestParam注解接收参数2.1)postman发出post请求2.2)postman发出get请求…

锂电池搅拌机的设备健康管理解决方案

随着电动车辆和可再生能源市场的迅速发展,锂电池作为一种重要的能源存储产品,正变得越来越重要。而锂电池搅拌机作为锂电池生产线中的核心设备之一,其正常运行对于生产线的高效稳定至关重要。为了确保锂电池搅拌机的可靠性和设备寿命&#xf…

SQL进阶理论篇(二十一):基于SQLMap的自动化SQL注入

文章目录 简介获取当前数据库和用户信息获取MySQL中的所有数据库名称查询wucai数据库中的所有数据表查看heros数据表中的所有字段查询heros表中的英雄信息总结参考文献 简介 从上一小节,可以发现,如果我们编写的代码存在着SQL注入的漏洞,后果…

android内存管理机制概览

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、相关概念3.1 垃圾回收3.2 应用内存的分配与回…

crtc 原理

CRTC Streams the framebuffer following the screen’s timings Driving screens : the CRT ControllerDriving screens : the CRT Controller Streams the framebuffer following the screen’s timings After each line, the CRTC must wait for the CRT to go back to th…

GoDance分布式搜索引擎项目

目录 前言一、布尔模型二、 实用评分函数1. 查询归一化因子2. 协调因子3. TF-IDF3.1 TF3.2 IDF3.3 字段长度归一值BOOST 4. 向量空间模型具体方案 三、按受欢迎度提升权重四、实时搜索与相关搜索五、具体实现方案1. 布尔模型2. 评分函数3. 实时相关搜索 前言 5月6日参加了字节…

<script setup> 的作用

一、使用<script setup> 之后&#xff0c;就不需要手动写以下代码&#xff0c;只要写逻辑代码 未加setup&#xff0c;vite 工程要加上下面代码 *export default{ * setup(){ * //只要写逻辑代码 * return{***} * } * } 加了setup &#xff0c;export default 、…

doris基本操作,05-Rollup

简述 Rollup类似于mysql的视图&#xff0c;区别在于视图并没有将数据独立存储&#xff0c;视图是逻辑上的连接。而Rollup将数据独立存储了&#xff0c;玩的是真的。当查询命中Rollup时&#xff0c;会从Rollup表里获取数据&#xff0c;提高查询效率。 操作 创建Rollup表 alt…

web自动化测试的智能革命:AI如何推动软件质量保证的未来

首先这个标题不是我取的&#xff0c;是我喂了关键字让AI给取的&#xff0c;果然非常的标题党&#xff0c;让人印象深刻&#xff0c;另外题图也是AI自动生成的。 先简单回顾一下web自动化测试的一些发展阶段 QTP时代 很多年前QTP横空出世的时候&#xff0c;没有人会怀疑这种工…

插入排序详解(C语言)

前言 插入排序是一种简单直观的排序算法&#xff0c;在小规模数据排序或部分有序的情况下插入排序的表现十分良好&#xff0c;今天我将带大家学习插入排序的使用。let’s go ! ! ! 插入排序 插入排序的基本思想是将待排序的序列分为已排序和未排序两部分。初始时&#xff0c…

【序列化和反序列化】

&#x1f341;什么是序列化和反序列化&#xff1f; &#x1f341;典型解析&#x1f341;拓展知识仓&#x1f341;如何进行序列化和反序列化&#x1f341;未实现Serializable&#xff0c;可以序列化吗? &#x1f341;典型解析 在Java中&#xff0c;我们可以通过多种方式来创建对…

java接口限流详解

目录 1.简介1.1.为什么需要限流?1.2.限流和熔断有什么区别&#xff1f;1.3.限流和削峰有什么区别&#xff1f;1.4 缓存&#xff0c;降级&#xff0c;限流简介 2.应用级限流2.1 控制并发数量2.2 控制访问速率2.2.1 令牌桶算法2.2.2 漏桶算法 3.分布式限流4.交流群 1.简介 接口…

渗透测试——1.3计算机网络基础

一、黑客术语 1、肉鸡&#xff1a;被黑客攻击电脑&#xff0c;可以受黑客控制不被发现 2、端口&#xff08;port&#xff09;&#xff1a;数据传输的通道 3、弱口令&#xff1a;强度不高&#xff0c;容易被猜到的口令、密码 4、客户端&#xff1a;请求申请电脑&#xff08;…

宝塔mysql本地服务器状态异常如何解决

今天安装宝塔的时候突然遇到的问题 来吧 直接上bug图 答案&#xff1a;修改Mysql数据库密码

【论文阅读笔记】SegVol: Universal and Interactive Volumetric Medical Image Segmentation

Du Y, Bai F, Huang T, et al. SegVol: Universal and Interactive Volumetric Medical Image Segmentation[J]. arXiv preprint arXiv:2311.13385, 2023.[代码开源] 【论文概述】 本文思路借鉴于自然图像分割领域的SAM&#xff0c;介绍了一种名为SegVol的先进医学图像分割模型…

不同参数规模大语言模型在不同微调方法下所需要的显存总结

原文来自DataLearnerAI官方网站&#xff1a; 不同参数规模大语言模型在不同微调方法下所需要的显存总结 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703254378255 大模型的微调是当前很多人都在做的事情。微调可以让大语言模型适应特定领域的任…