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

《Java核心技术》笔记——第六章

文章目录

  • CH6.接口、lambda表达式与内部类
    • 1.接口基本
    • 2.常用接口
    • 3.lambda表达式
    • 4.内部类
    • 5.服务加载器与代理

前章: 第三章~第五章的学习笔记

CH6.接口、lambda表达式与内部类

1.接口基本

  1. 接口基本——interface声明,方法无需指明public(默认都是public),继承时使用implements关键字,接口支持多继承。接口可以看做一个c++中纯虚的抽象基类,它代表的含义是:继承自这个接口的类应该具有某些行为(接口的函数),而不在乎具体这些行为怎么实现的
  2. 接口中不能包含实例字段,但是可以包含常量(字段也都是默认public)
  3. 接口可以继承接口
  4. 接口中同样可以定义静态方法、私有方法(不知道为什么这么做)
  5. 接口的方法可以有默认实现,需要有关键字default——可以用于接口演化,比如接口新增一个方法,原来实现这个接口的类就编不过了,如果新增的方法加default给一个默认的实现,则原来的代码可以编过(会使用这个新方法的默认实现)
  6. 同名函数冲突——类与接口中有同名函数,同时继承自该类与该接口的类会“优先类”;接口与接口有同名函数,看继承者实现谁,如果两个接口有一个有默认实现,继承者必须定义同名函数,可以通过接口名.super.同名方法指定调谁的实现=>因为类优先,super含义就是父类(因为单继承,父类只可能有一个),而父接口应该用接口名.super代表
  7. 一种特殊的接口,标记接口,没有任何方法的接口,只是作为标记作用,使其子类可以使用instanceof判定是否有该标记,如cloneable就是标记接口——每个类继承自Object,都有Object.clone方法,但是这个方法是protected的,无法使用,需要在子类中声明为public,并调用super.clone的实现;但是这样会抛出CloneNotSupportedException,这是因为Object.clone的实现中判断了this instanceof Cloneable,不是的话会抛出异常
  8. 匿名接口——可以直接new一个接口,然后在{}中写实现,这个接口实现类是匿名的,无法再生成该类的一个实例

2.常用接口

  1. Comparable<Type>或者Comparable——Array的比较要求比较的元素有实现该接口(这也是函数式接口)
  2. Cloneable——可克隆的接口
  3. Predicate——专门用来接受判断lambda表达式的函数式接口
  4. Supplier——供应者接口(函数式接口,有一个T get()函数),用于懒加载,如Object.requireNonNullElseGet(T,Supplier<T>)可以在传入T类型的参数为null时利用Supplier生成一个默认的实例(为null的情况可能比较少,所以传入一个将来要调的方法而不是传入一个实例,以实现懒计算
  5. Comparator<T>接口——用于比较,其中的一些静态/成员方法用于生成Comparator,如comparing,thenComparing,naturalOrdr,reverOrder,reversed等;额外的一个小点,Comparator中有两个抽象函数但是依然是函数式接口,这是因为,其中一个是从Object继承来的重写的equals函数(接口也继承自Object类)

3.lambda表达式

  1. lambda表达式基本:(参数列表)->{函数体}——当参数列表类型可以由接收的函数式接口推断出的话,可以省略类型;在此基础上如果还只有一个参数,括号也可以省略;如果函数体只有一个语句,可以省略{}

  2. 与函数式接口的兼容:lambda表达式可以赋值给一个函数式接口(什么叫函数式接口——只有一个抽象函数的接口),与函数式接口完全兼容大大拓展了lambda表达式的适用范围
    在这里插入图片描述
    在这里插入图片描述

  3. 方法引用,等价于对应形式的lambda表达式,也可以用函数式接口对象接收,三种形式:

    • object::instanceMethod==>(参数列表)->object.instanceMethod(参数列表);唯一不同的是方法引用会马上检测object是否为null,而对应的lambda表达式会等到调用时才检测object是否为null
    • Class::instanceMethod==>(Class类参数 self,参数列表)->self.instanceMethod(参数列表);
    • Class::staticMethod==>(参数列表)->Class.staticMethod(参数列表);
  4. 构造器引用——与方法引用一样,只不过方法名为new,如object::new,以及数组形式的构造器object[]::new;调用的构造器重载版本根据具体场景推断

  5. @FunctionalInterface注解可以表明这个接口是函数式接口,在向该接口增加抽象方法时会报错,且javadoc中会标明这个接口是函数式接口

  6. lambda表达式的捕获——无需像c++一样写捕获列表,直接捕获lambda表达式所在作用于变量即可(值传递),称为自由变量,同时无法捕捉会变的变量

4.内部类

  1. 内部类——与c++的内部类一样,不过不同的是,
    • java内部类初始化的时候会默认传入外部类的this指针,使其可以访问创建它的外部类对象
    • java内部类在外部类外面创建的话得加外部类的对象,比如outClassObj.new InnerClass(),而不能直接new OutClass.InnerClass
  2. 局部内部类——在函数内定义的类;除了像一般内部类一样访问外部类的数据,还可以访问函数的局部变量(像lambda表达式一样捕获,只能捕获事实不变量)
  3. 匿名内部类——如匿名接口,实际也可以定义继承自普通(非接口)类的匿名子类;匿名内部类没有构造函数,可以通过初始化块来初始化数据–>引申一个双括号初始化技巧
  4. 静态内部类——加static标识
class OuterClass{public static class InnerClass{...}
}
  • 静态内部类才与c++中的内部类相当;静态内部类不像一般内部类,创建的时候不会传入外部类的对象指针;静态内部类也成为嵌套类
  • 构造时可以直接new OuterClass.InnerClass()构造
  • 与常规内部类不同,静态内部类可以有静态字段和方法
  • 接口内部声明的内部类自动是static和public

5.服务加载器与代理

略。看不懂,以后有机会再拜读

相关文章:

《Java核心技术》笔记——第六章

文章目录CH6.接口、lambda表达式与内部类1.接口基本2.常用接口3.lambda表达式4.内部类5.服务加载器与代理前章&#xff1a; 第三章~第五章的学习笔记CH6.接口、lambda表达式与内部类 1.接口基本 接口基本——interface声明&#xff0c;方法无需指明public&#xff08;默认都是…...

假设检验的基本思想

假设检验 首先了解参数估计&#xff0c;比如有服从正态分布的数据集X∼N(μ,σ2)X\sim N(\mu,\sigma^{2})X∼N(μ,σ2)&#xff0c;我们希望根据样本x1,...xnx_{1},...x_{n}x1​,...xn​估计出参数μ,σ\mu,\sigmaμ,σ&#xff0c;这些参数可以是一个具体值&#xff0c;也可以…...

c语言机试练习

1.打印日期 给出年分m和一年中的第n天&#xff0c;算出第n天是几月几号。 输入描述&#xff1a; 输入包括两个整数y(1<y<3000)&#xff0c;n(1<n<366)。 输出描述&#xff1a; 可能有多组测试数据&#xff0c;对于每组数据&#xff0c; 按 yyyy-mm-dd的格式将输入中…...

Python的PyQt框架的使用-资源文件夹的使用

Python的PyQt框架的使用-资源文件夹的使用一、前言二、Qt Designer加载资源文件三、资源文件的转换一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;小伙伴们&#xff0c;让我们一起来学习Python的PyQt框架的使用。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三…...

如何遍历HashMap

文章目录1.Iterator EntrySet2.Iterator keySet3.forEach EntrySet4.forEach keySet5.lambda6.Streams API单线程7.Streams API 多线程1.Iterator EntrySet Iterator<Map.Entry<Integer,String>> iteratormap.entrySet().iterator; while(iterator.hasNext()){Map…...

11技术太卷我学APEX-数据加载

11技术太卷我学APEX-数据加载 0 所谓的数据加载 就是导入数据到数据库表中&#xff0c;本示例就采用Excel导入数据到《技术太卷我学APEX》的apex_learn表。表结构大概是这样的 CREATE TABLE "APEX_LEARN" ( "P_ID" NUMBER(17,0) NOT NULL ENABLE, &quo…...

JVM记录

一、JVM体系结构&#xff1a; 类装载器ClassLoader&#xff1a;用来装载.class文件执行引擎&#xff1a;执行字节码&#xff0c;或者执行本地方法运行时数据区&#xff1a;方法区、堆、Java栈、程序计数器、本地方法栈1、方法区&#xff1a; 也称“永久代”&#xff0c;“非堆”…...

盘点机器学习实战中最频繁使用的AutoML工具库

在日常的Kaggle比赛和工作中&#xff0c;经常会遇到AutoML工具。本文总结了常见的AutoML库&#xff0c;可供大家选择。 LightAutoML 项目链接&#xff1a;https://github.com/sberbank-ai-lab/LightAutoML 推荐指数&#xff1a;⭐⭐⭐ LightAutoML是基于Python环境下的结构…...

50-Jenkins-Lockable Resources插件实现资源锁定

Lockable Resources插件实现资源锁定前言安装插件使用插件资源配置Pipeline中使用前言 用来阻止多个构建在同一时间试图使用同一个资源。这里的资源可能是一个节点、一个代理节点、一组节点或代理节点的集合&#xff0c;或者仅仅是一个用于上锁的名字。如果指定的资源没有在全…...

测试员,如果未来5年你不想失业……你得学会自动化测试

工作中总会遇到各种各样的无常&#xff0c;这边测试工具的工作你刚刚接手&#xff0c;那边又临时紧急插播一个接口测试任务&#xff0c;这对于测试老鸟来说已然是常态&#xff0c;但对新手来说却是个挑战。 不得不承认&#xff0c;工作就是在无限的变化和挑战中不断的磨炼我们…...

腾讯开源的 hel 提供了加载远程模块的能力,谈谈它的实现原理

腾讯开源的 hel&#xff0c;提供了一种运行时引入远程模块的能力&#xff0c;模块部署在 CDN&#xff0c;远程模块发布后&#xff0c;不需要重新构建发布&#xff0c;就能生效。 个人觉得它的实现原理非常的不错&#xff0c;因此分享给大家。 远程模块可以作为微模块&#xf…...

【运动控制】CNC三轴小线段路径规划

CNC三轴小线段路径规划 文章目录CNC三轴小线段路径规划一、项目说明二、具体实现1、速度规划2、小线段插补3、运动学逆解刀轴插补点4、差分处理得到实际的速度和加速度5、加速度滑动平均6、实现的效果如图所示三、Reference写在前面&#xff0c;本文是作为一个练手小项目的总结…...

渗透测试之DNS域名信息探测实验

渗透测试之DNS域名信息探测实验实验目的一、实验原理1.1 域名1.2 .域名的构成1.3 域名的基本类型1.4 域名级别二、实验环境2.1 操作机器三、实验步骤1. 使用sp查询域名信息2. 进行探测实验实验目的 掌握使用nslookup进行DNS域名信息探测的原理和方式了解子域名查询网站 一、实…...

ASE140N04-ASEMI低压MOS管ASE140N04

编辑-Z ASE140N04在TO-220F封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为4mΩ&#xff0c;是一款N沟道低压MOS管。ASE140N04的最大脉冲正向电流ISM为400A&#xff0c;零栅极电压漏极电流(IDSS)为1uA&#xff0c;其工作时耐温度范围为-55~175摄氏度。ASE140N04…...

Qt——QLineEdit

QLineEdit是一个单行文本编辑控件。 使用者可以通过很多函数&#xff0c;输入和编辑单行文本&#xff0c;比如撤销、恢复、剪切、粘贴以及拖放等。 通过改变QLineEdit的 echoMode() &#xff0c;可以设置其属性&#xff0c;比如以密码的形式输入。 文本的长度可以由 maxLength(…...

前端-HTML-zxst

HTML HTML是超文本标记语言&#xff08;HyperText Mark-up Language&#xff09; CSS是层叠样式表&#xff08;Cascading Style Sheets&#xff09; JS&#xff0c;即JavaScript是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言 <!--doctype标签声明…...

终极方案,清理 docker 占用磁盘过大问题, 亲测有效!

背景 在笔者的工作测试环境中&#xff0c;使用过程中突然出现根磁盘快吃满了&#xff08;docker也是使用的根池盘的/var/lib/docker&#xff09;&#xff0c; wtf &#xff1f; 服务用不了&#xff1f; 当然网上找到了一些常规的清楚docker 日志文件 但是通过df -hT 查看到over…...

puzzle(1321)时间旅人

时间旅人 最强大脑同款项目。​​​​​​​ 每个指针会带动周围2圈指针一起带动&#xff0c;内圈8个旋转180度&#xff0c;外圈16个旋转90度&#xff0c;全部调整为朝上则胜利。 问题本质&#xff1a; 很明显&#xff0c;问题本质就是求每个格子的点击次数&#xff0c;最少为…...

活动预告 | 2023 Meet TVM 开年首聚,上海我们来啦!

内容一览&#xff1a;从去年 12 月延期至今的 TVM 线下聚会终于来了&#xff01;首站地点我们选在了上海&#xff0c;并邀请到了 4 位讲师结合自己的工作实践&#xff0c;分享 TVM 相关的开发经验&#xff0c;期待与大家线下相聚~ 关键词&#xff1a;2023 Meet TVM 线下活动 自…...

CoreIDRAW 软件的强大功能及适用性

1.1 绘图功能CoreIDRAW 软件是一种特殊的设计软件和图形绘制软件&#xff0c;使用方便、功能强大&#xff0c;在网页效果、商业插画设计、海报广告设计、平面设计等各类行业中都得到广泛的应用&#xff0c;在服装设计行业中&#xff0c;也逐渐地投入使用。由于纺织服装行业在设…...

Youtu-VL-4B-Instruct快速上手:从拉取镜像到自定义端口,完整部署指南

Youtu-VL-4B-Instruct快速上手&#xff1a;从拉取镜像到自定义端口&#xff0c;完整部署指南 1. 环境准备与镜像拉取 在开始部署Youtu-VL-4B-Instruct之前&#xff0c;我们需要确保运行环境满足基本要求。这个轻量级但功能强大的视觉-语言模型需要特定的硬件和软件支持才能发…...

【案例共创】码道小工匠,儿童跳绳智能计数系统开发实战

最新案例动态&#xff0c;请查阅【案例共创】码道小工匠&#xff0c;儿童跳绳智能计数系统开发实战小伙伴们快来进行实操吧&#xff01; 本案例由开发者&#xff1a;yd_sun提供&#xff0c;华为开发者空间案例中心优化并收录。 一、概述 1.1 适用对象 个人开发者高校学生企…...

Pixel Language Portal惊艳效果展示:全屏沉浸双栏布局下中英对照滚动同步+光标联动演示

Pixel Language Portal惊艳效果展示&#xff1a;全屏沉浸双栏布局下中英对照滚动同步光标联动演示 1. 像素语言传送门概览 **像素语言跨维传送门(Pixel Language Portal)**是一款基于腾讯Hunyuan-MT-7B核心引擎构建的创新翻译工具。与传统翻译软件不同&#xff0c;它将语言转…...

小白也能用!M2FP多人人体解析服务一键部署教程

小白也能用&#xff01;M2FP多人人体解析服务一键部署教程 1. 什么是M2FP多人人体解析服务&#xff1f; M2FP&#xff08;Mask2Former-Parsing&#xff09;是目前业界领先的语义分割算法&#xff0c;专注于多人人体解析任务。它能精准识别图像中多个人物的不同身体部位&#…...

JavaScript中类的装饰器提案在属性与方法上的应用

JavaScript类装饰器处于TC39 Stage 3提案阶段&#xff0c;未标准化但Babel/TS已实验支持&#xff1b;方法装饰器接收target、propertyKey、descriptor&#xff0c;可增强行为&#xff1b;属性装饰器无统一签名&#xff0c;TS常用Reflect元数据&#xff1b;装饰器静态执行、不可…...

全网炸了!5亿人用的Axios竟被投毒,你的密钥还保得住吗?

早些时候&#xff0c;聊过 Python 领域那场惊心动魄的供应链攻击。当时我就感叹&#xff0c;虽然我们 JavaScript 开发者对这类套路烂熟于心&#xff0c;但亲眼目睹这种规模的“投毒”还是头一次。然而&#xff0c;属于我们 JS 圈的至暗时刻&#xff0c;终究还是卷土重来了。而…...

从 LLM 到 OpenClaw:七步看懂 Prompt、Memory、MCP、Skills、Agent

从 LLM 到 OpenClaw&#xff1a;七步看懂 Prompt、Memory、MCP、Skills、Agent 这两年 AI 术语越来越多&#xff1a;LLM、MCP、Agent、Skills、OpenClaw。 如果你不是技术背景&#xff0c;第一次看到这串词&#xff0c;基本都会懵。下面我用一个统一场景来讲&#xff1a;把 AI…...

OpenClaw浏览器自动化:Qwen3-14b_int4_awq驱动网页检索与数据抓取

OpenClaw浏览器自动化&#xff1a;Qwen3-14b_int4_awq驱动网页检索与数据抓取 1. 为什么需要浏览器自动化助手 作为一个经常需要收集行业动态的技术博主&#xff0c;我每天要花大量时间在不同网站间切换、搜索关键词、复制粘贴数据。这种重复劳动不仅效率低下&#xff0c;还容…...

【DBO三维路径规划】基于多策略改进的蜣螂算法MSDBO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

3种方案玩转赛博朋克2077存档修改:从入门到精通的技术指南

3种方案玩转赛博朋克2077存档修改&#xff1a;从入门到精通的技术指南 【免费下载链接】CyberpunkSaveEditor A tool to edit Cyberpunk 2077 sav.dat files 项目地址: https://gitcode.com/gh_mirrors/cy/CyberpunkSaveEditor 赛博朋克2077存档编辑器是一款专业级游戏数…...