9.反射和Lambda表达式

news2024/9/22 5:39:31

目录

一、反射

1.反射是什么

2.反射操作的四个核心类(都处在java.lang.reflect)

3.在java中获取一个类的class对象一共有三种途径:

4.想通过反射来操作类或者对象,第一步就是要获得该类的class对象。

 5.Constructor应用

 6.Method应用

 7.Field应用

二、Lambda表达式(有的语言称为闭包)

1.最常见的写法:

 2.使用匿名内部类来简化子类的实现。

 3.使用Lambda表达式

 4.不同情况的Lambda表达式


一、反射

1.反射是什么

动态(运行时)获取类信息以及动态调用该对象的属性和方法的功能,就叫反射

在所有第三方框架的基础上。在运行时,

对任意一个类,都能拿到该类的所有属性和方法的信息

对于任意一个属性,都能调用该对象的任意属性和方法。

2.反射操作的四个核心类(都处在java.lang.reflect)

class 关键字,声明一个类

Class:反射操作的核心类

Constructor:与构造方法相关的类

Methon:与类中方法相关的类

Field:与类中属性相关的类

3.在java中获取一个类的class对象一共有三种途径:

 (1)直接通过类名称 .class获取class对象

 (2)通过该类的任意实例化对象,调用getClass()方法

 (3)使用Class类提供的Class.forName("类的全名称")

4.想通过反射来操作类或者对象,第一步就是要获得该类的class对象。

编译期类型

运行时类型RTTI

Person per = new Student();

per这个引用编译期类型就是Person

最终在JVM运行的时候,到底是哪个类型,运行时类型

 5.Constructor应用

1.通过反射来创建一个类的实例

 通过class对象的newInstance()方法默认调用该类的无参构造,当无参构造不存在,或者无参构造不可见(private,不同包的包权限)这个方法无法使用。

 2.当需要使用类的其他构造方法来创建对象时,需要用到和构造方法这个结构相关的反射类Constructor

(1) Class类的getConstructors():只能获取当前类的所有public权限的构造方法

无法获取父类的Constructor对象

 (2)Class类的getDeclearConstructors()可以拿到当前类的所有构造方法,甚至包含私有方法

无法获取父类的Constructor对象

(3)拿到指定的Constructor对象,可以通过该对象来创建实例化Student对象

 (4)通过constructor类创建私有构造方法的对象

 6.Method应用

(1)cls.getMethods( )     可以拿到当前类已经父类的所有public方法

 (2)cls.getDeclareMethods()    仅能拿到当前类定义的所有方法,包含private方法

拿到Methods对象后,通过反射来调用对象的

 总结:通过反射来调用一个类的方法

1.先获取该类的class对象

2.通过getDec或getMethod获取这个方法的method反射对象

3.若该方法是一个成员方法,还需要产生该类的实例

4.method.invoke(该类的实例(如果是静态方法就是null),具体的方法参数);

 7.Field应用

 Field的使用

1.先获取class对象

2.获取指定名称的Field对象

3.创建该类的实例(如果你调用的是成员属性)

4.   set(obj-具体操作的对象,要设置的属性值)

      get(obj-具体操作的对象)--获取相应的属性值。

二、Lambda表达式(有的语言称为闭包)

一种编程范式,函数式编程

面向对象的编程,啥都需要类,有个对象,通过对象去处理数据和方法

在大数据运算中,通常我们只需要关系特定的方法调用即可。

在Java中,Lambda表达式的前身就是匿名内部类的简化写法

Lambda表达式的语法:

(参数列表) -> {

      方法体代码

      [return 返回值];

}

1.最常见的写法:

 2.使用匿名内部类来简化子类的实现。

假设此时具体的实现子类只会使用一次,就没必要每次都创建一个对象

相当于

class  没名字  implements Imessage{

    覆写了printMessage方法

}

 3.使用Lambda表达式

使用规则:

如果只有一条语句,花括号可以省略。大于一条,不能省略

参数类型可以省略,若省略了,则每个参数的类型都要省略

1.直接省略了所有和类相关的代码,只保留了最核心的方法的代码,包括方法的参数,方法的方法体

任何一个可以使用Lambda表达式的接口,前提是只有一个抽象方法(Lambda表达式把方法名都省了,因此默认就覆写那个抽象方法)

2.此注解用在接口声明上,检查当前的接口是否只包含一个抽象方法

3. 在JDK1.8中,对接口做了扩展,允许接口存在普通方法。

普通方法使用default来声明,包含方法体。

 4.不同情况的Lambda表达式

对于接口的抽象方法分为以下几种情况

   (1)无返回值无参数

   (2)无返回值有参数

   (3)有返回值无参数

   (4)有返回值有参数

public class LambdaUsage {
    public static void main(String[] args) {
//        NonReturnNonParameter i1 = () -> {
//           //如果有多行代码,大括号不可以省略
//            System.out.println("我是第一行");
//            System.out.println("我是第二行");
//            System.out.println("我是第三行");
//        };
//        i1.test1();  //调用的就是刚覆写的方法
//
//
//
//        NonReturnHasParameter i2 = (t1,t2) -> {
//         t1 =t1+1;
//         t2 = "门门";
//            System.out.println(t2 + ":" +t1);
//        };
//        i2.test2(18,"hello");

//        HasReturnNoneParameter i3 = () -> {
//          int num =0;
//          //num要经过一大堆的运算
//            num += 10;
//            return num;
//        };
//        int res = i3.test3();
//        System.out.println(res);
//        HasReturnNoneParameter i3 = () ->10;
//        int res  =i3.test3();
//        System.out.println(res);

        HasReturnHasParameter i4 = (t1,t2) -> {
          t1 += 101;
            System.out.println(t2);
            return t1;
        };
        int res = i4.test4(18,"我是门门");
        System.out.println(res);
    }
}
interface  NonReturnNonParameter{
    void test1();
}

interface NonReturnHasParameter{
    void test2(int age,String name);
}

interface HasReturnNoneParameter{
    int test3();
}

interface  HasReturnHasParameter{
    int test4(int age,String name);
}

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

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

相关文章

LabVIEW开发光线追踪可视化分段反射器测试台

LabVIEW开发光线追踪可视化分段反射器测试台 为了满足美国国家航空航天局(NASA)对未来望远镜的要求,新的红外空间天文台将在哈勃太空望远镜使用寿命结束后取代其。作为HST的继任者,詹姆斯韦伯太空望远镜(JWST&#xf…

零基础小白如何快速入门网络安全/Web安全?

前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人…

scratch lenet(6): feature_map可视化的C语言实现

scratch lenet(6): feature_map可视化的C语言实现 文章目录 scratch lenet(6): feature_map可视化的C语言实现1. 目的2. FeatureMap 的归一化2.1 公式2.2 代码实现2.3 代码调用 3. 可视化结果4. References 1. 目的 将卷积层(Convolution)、下采样层(SubSampling&a…

Linux系统之安装Ward服务器监控工具

Linux系统之安装Ward服务器监控工具 一、Ward介绍1.1 Ward简介1.2 Ward特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、部署java环境3.1 jdk下载地址3.2 解压jdk安装包3.3 复制二进制文件3.4 配置环境编辑3.5 查看java版本 四、下载ward的jar包4.1 下载软件包4.2 …

阿里巴巴内部10w+字总结的Java面试题,全是面试官必问技术

献上熬夜整理最新“10w字总结的Java面试题(附答案)”够你刷! 春招升级打怪拿offer,10w字总结的Java面试题(附答案)够你刷 其包含的内容模块有:基础、JVM、多线程与高并发、Spring、MyBatis、Spr…

APP自动化测试高级定位技巧,我敢打赌你一定不知道

目录 高阶定位-Xpath 包含-contains() XPath 轴 XPath 运算符 AND OR 高阶定位-CSS css selector 定位介绍 css selector 用法 示例 iOS css selector 定位 Toast 识别 Toast 是什么 Toast 定位 Toast 定位 显示等待 使用lambda表达式 总结三种等待方法 高阶定…

Ansible自动化运维工具之playbook剧本编写含lnmp

1.playbook的相关知识 1.1 playbook 的简介 playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部…

【黑马头条】解决P11@EnableDiscoveryClient注解无法导入爆红、bootstrap.yml配置文件图标无法显示成带云朵的小绿叶图标

本期目录 1. 问题描述2. 问题原因3. 解决方法 1. 问题描述 如果按黑马老师给的 heima-leadnews-service 模块的 pom 文件所写的依赖,会发现有 2 个 Bug : 首先,启动类 UserApplication 上的服务发现开关注解 EnableDiscoveryClient 不存在。 …

知识复盘(Session、Mysql、Servlet、Jsp、SSM)

一、会话跟踪技术(Session Tracking) 1.为什么会出现会话机制? 目前主流的通讯方式就是客户端和服务端之间进行通信,而这种通信是通过Http协议实现的,但Http协议本身是无状态的,所以客户端每发送一次请求到服务器都会被当做一个…

windows上的Linux系统WSL2

目录 简介 安装 简介 适用于 Linux 的 Windows 子系统 (WSL) 可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销,用于快速的多平台验…

Unity UGUI2——Canvas与EventSystem

一、Canvas ​ Canvas 的意思是画布,它是 UGUI 中所有 UI 元素能够被显示的根本,它主要负责渲染自己的所有 UI 子对象 ​ 如果 UI 控件对象不是 Canvas 的子对象,那么控件将不能被渲染 ​ 我们可以通过修改 Canvas 组件上的参数修改渲染方…

[架构之路-214]- UML-类图图解、详解、结构化、本质化讲解

目录 一、什么是类 1.1 概述 1.2 UML中类的表示 1.3 接口 1.4 抽象类 1.5 模板类 二、什么类图 2.1 概述 2.2 类关系 三、UML类图 3.1 结构关系 3.1.1 完全一体:继承关系 (类与类耦合度最高,类与类之间最强的关系) …

空天|谈一谈飞机引擎的应急断离

为什么突然想到这个话题呢?归功于即将到来的材料力学考试。在复习科学出版社出版的苟文选、王安强等编写的《材料力学(1)》第三版第三章的连接键强度校核等内容时,一个例题吸引了我的注意力。 例3-4: 水平力Fg。 强而…

理论实战源码齐飞!架构师社区疯传的SpringSecurity进阶小册真香

安全管理是Java应用开发中无法避免的问题,随着Spring Boot和微服务的流行,Spring Security受到越来越多Java开发者的重视,究其原因,还是沾了微服务的光。作为Spring家族中的一员,其在和Spring家族中的其他产品如SpringBoot、Spring Cloud等进…

Unity UGUI3——三大基础控件

一、Image ​ Image 是图像组件,是 UGUI 中用于显示精灵图片的关键组件 ​ 除了背景图等大图,一般都使用 Image 来显示 UI 中的图片元素 (一)参数介绍 Source Image:图片来源 图片类型必须是“精灵 Sprite”类型 Col…

IBM N系列存储和NetApp FAS之间的对应关系

IBM在很长一段时间都是OEM NetApp的FAS存储作为他的NAS产品线,在IBM叫做Storage N series,就是N系列,在2014年IBM终止了和NetApp之间的OEM关系,目前在市场上的OEM的NetApp存储型号主要是 FAS3000,FAS31和FAS32的中端系…

HTB靶场:简单inject

HTB靶场:简单inject 1、进入靶场,连接vpn后开启靶机 inject 2、nmap扫描一下靶机 nmap -v -A 10.10.11.*扫描后显示服务和端口信息8080和22 3、打开web服务 1)有上传文件功能 简单上传了几个文件(txt,img等 上传过程根据参数简…

SpringBoot 实现 PDF 添加水印有哪些方案?

简介 PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版…

全国青少年软件编程(Scratch)等级考试二级考试真题2023年5月——持续更新.....

一、单选题(共25题,共50分) 1.运行下列哪段程序,可以让狗狗走到木屋门口?() A. B. C. D. 标准答案:C 2.下列哪个选项可以控制:按下左键扫帚向左旋转15度,按下右键扫帚向右旋转15度?() A. B. C.

LLM系列 | 09: 基于ChatGPT构建智能客服系统(query分类安全审核防注入)

简介 竹斋眠听雨,梦里长青苔。门寂山相对,身闲鸟不猜。小伙伴们好,我是卖热干面的小女孩。紧接前面几篇ChatGPT Prompt工程系列文章: 04:ChatGPT Prompt编写指南05:如何优化ChatGPT Prompt?06:ChatGPT Prompt实践&am…