当前位置: 首页 > news >正文

反射、枚举和lambda表达式

文章目录

  • 一、反射
    • 1.1 什么是反射
    • 1.2 反射相关的类
    • 1.3 示例
      • 获取Class对象
      • 通过反射去创建对象
      • 调用带两个参数且私有的构造方法
      • 获取私有属性
      • 反射私有方法
  • 二、枚举
    • 2.1 什么是枚举以及其优缺点
    • 2.2 如何使用枚举
      • 组织常量的基本方法
      • 枚举类的其他方法示例
      • 枚举能否通过反射拿到实例对象
  • 三、lambda表达式
    • 3.1 什么是 lambda表达式
    • 3.2 lambda表达式的基本使用
      • 关于变量捕获
      • 对于自定义函数式接口
      • lambda表达式在集合中的使用

一、反射

1.1 什么是反射

  1. 概念:正常情况下,我们的类是封装起来的,外人除非创建对象,否则无法访问到。但是反射可以让我们知道这个类的所有属性方法以及对于任意一个对象,都能调用它的任意方法和属性
    • 是一种特性,和数据结构没有关系

1.2 反射相关的类

  1. :Class类、File类、Method类、Constructor类
    • Class类:表示类和接口
      • 理解:程序编译之后会变成“Class字节码文件”,然后交给JVM运行,JVM里面都是对象,Class字节码文件也因此会被加载为一个对象,该对象就是我们获取的Class对象,拿到Class对象就可以进行正常的反射了
    • File类:表示类的成员变量/属性
    • Method类:表示类的方法
    • Constructor类:表示类的构造方法
  2. 相关方法

1.3 示例

获取Class对象

在这里插入图片描述

通过反射去创建对象

在这里插入图片描述

调用带两个参数且私有的构造方法

在这里插入图片描述

获取私有属性

在这里插入图片描述

反射私有方法

在这里插入图片描述

二、枚举

2.1 什么是枚举以及其优缺点

  1. 概念:枚举是在 JDK1.5以后引入,可以帮我们组织常量
  2. 优缺点
    • 优点
      • 枚举常量更简单安全,避免把其他的常量值认为是枚举类型
      • 枚举里面有内置方法,使用起来更规范美观
      • 枚举可以避免反射和序列化问题,因为其能创造出的实例只有一个,所以使用单例模式的时候是安全的
    • 缺点
      • 因为枚举类型的构造方法默认是私有的,所以无法继承,无法扩展,就算继承了也没有什么用

2.2 如何使用枚举

组织常量的基本方法

在这里插入图片描述
在这里插入图片描述

枚举类的其他方法示例

在这里插入图片描述

枚举能否通过反射拿到实例对象

在这里插入图片描述
在这里插入图片描述

三、lambda表达式

3.1 什么是 lambda表达式

  1. 概念:是Java8中一个重要的新特性,允许通过表达式来代替功能接口,有点类似于【匿名表达式】
    • 表达式形式:有一个正常的参数列表 + 使用这些参数的主体(body,可以是一个表达式或一个代码块)
  2. 基本语法
    在这里插入图片描述

3.2 lambda表达式的基本使用

关于变量捕获

  1. 概念:lambda表达式和匿名内部类都存在变量捕获,这可以帮我们理解其作用域

在这里插入图片描述

对于自定义函数式接口

在这里插入图片描述

lambda表达式在集合中的使用

  1. 集合中可以使用lambda表达式
    • Collection:removeIf()、spliterator()、stream()、parallelStream()、forEach()
    • List:replaceAll()、sort()
    • Map:getOrDefault()、forEach()、replaceAll()、putIfAbsent()、remove()、computerIfAbsent()、computeIfPresent()、computer()、merge()

在这里插入图片描述
2. forEach()
在这里插入图片描述
在这里插入图片描述
3. sort()
在这里插入图片描述

http://www.lryc.cn/news/474789.html

相关文章:

  • Stable Diffusion Web UI 1.9.4常用插件扩展-WD14-tagger
  • java 第19天 Lambda、jdk8.0新方法、Optional
  • 江协科技STM32学习- P31 I2C通信协议
  • 6、liunx目录的功能
  • 挑战Java面试题复习第5天,无人扶我青云志
  • 大规模语言模型:从理论到实践(1)
  • C#如何锁定和解除鼠标及键盘BlockInput
  • Stable Diffusion 3.5发布:图像生成新纪元,多模态AI的突破!
  • MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题
  • RabbitMQ 实现消息队列负载均衡
  • 嵌入式linux中HTTP协议原理基本分析
  • thinkphp和vue基于Workerman搭建Websocket服务实现用户实时聊天,完整前后端源码demo及数据表sql
  • 浅谈射频应用
  • SAP(PP生产制造)拆解工单业务处理
  • 《Python游戏编程入门》注-第4章2
  • deque
  • YOLOv11改进策略【卷积层】| CVPR-2020 Strip Pooling 空间池化模块 处理不规则形状的对象 含二次创新
  • yt-dlp下载视频
  • oracle insert忽略主键冲突,忽略重复记录
  • 小新学习k8s第四天之发布管理
  • 01_IAR新建CC2530工程
  • 原生鸿蒙的竞争力到底如何?
  • 数字化生态平台:关键功能全解析
  • c 到 c++ 过渡
  • [linux驱动开发--环境搭建] qemu-9.1+linux-kernel-6.11
  • 019集——获取CAD图中多个实体的包围盒(CAD—C#二次开发入门)
  • 【Clickhouse 探秘】Clikchouse 有哪些表引擎?你都知道哪些?
  • 你好,C++并发世界
  • windows10 安装 达梦数据库DM8
  • ntp交叉编译 ntpdate时间同步