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

java面向对象进阶进阶篇--《JDK8,JDK9接口中新增的方法、接口的应用、适配器设计模式》

个人主页→VON

收录专栏→java从入门到起飞

接口→接口和接口与抽象类综合案例

 

一、JDK8接口中新增的方法

在JDK 8中,接口新增了几个重要的特性和方法,其中最显著的是默认方法(Default Methods)和静态方法(Static Methods)。这些特性使得接口在Java编程语言中变得更加灵活和功能强大。

默认方法(Default Methods):

默认方法允许在接口中定义具体的方法实现,而不再是纯粹的抽象方法集合。主要特点包括:

  • 实现方法:接口可以包含带有默认实现的方法体
  • 兼容性:默认方法的引入不会破坏现有的接口实现,因为现有实现不需要强制重写新增的默认方法。
  • 多继承冲突解决:如果一个类实现了多个接口,并且这些接口具有相同的默认方法,编译器会要求显式重写冲突的方法,以明确指定使用哪个接口的方法

注意事项:

1. 默认方法不是抽象方法,所以不强制重写,但是重写时别忘了去掉default关键字。

 示例:
InterA接口
package com.von.day15b;public interface InterA {public default void showA(){System.out.println("showA");}
}
InterImpl类
package com.von.day15b;public class InterImpl implements InterA{@Overridepublic void showA() {System.out.println("重写showA");}
}
结果展示: 

2. 定义默认方法时default不能省略。

3. 如果实现多个接口,并且多个接口中有相同的名字,子类就必须对该方法重写。 

示例: 
InterA
package com.von.day15b;public interface InterA {public default void showA(){System.out.println("A接口中的showA");}
}
InterB
package com.von.day15b;public interface InterB {public default void showA(){System.out.println("B接口中的showA");}public default void showB(){System.out.println("showB");}
}
InterImpl
package com.von.day15b;public class InterImpl implements InterA,InterB{}
结果展示:

静态方法(Static Methods):

接口中还可以定义静态方法,这些方法可以直接通过接口名调用,不需要实现类的实例。

接口中其他新增方法:

除了默认方法和静态方法,JDK 8中还新增了一些其他方法,以增强接口的功能:

  • 函数式接口(Functional Interface):引入了 @FunctionalInterface 注解,用于标识函数式接口,即只包含一个抽象方法的接口。

  • 接口中的方法可以有方法体:除了默认方法和静态方法外,还可以在接口中直接定义方法体的普通方法。

  • 接口中方法的可访问性:接口中的方法可以是 publicdefault 访问级别,不允许使用 privateprotected 访问级别。

 示例:

@FunctionalInterface
interface MathOperation {int operate(int a, int b);default void log() {System.out.println("MathOperation interface");}static void info() {System.out.println("Static method in MathOperation interface");}
}public class Main {public static void main(String[] args) {MathOperation addition = (a, b) -> a + b;MathOperation subtraction = (a, b) -> a - b;System.out.println(addition.operate(10, 5)); // 输出 15System.out.println(subtraction.operate(10, 5)); // 输出 5addition.log(); // 输出 "MathOperation interface"MathOperation.info(); // 输出 "Static method in MathOperation interface"}
}

在这个示例中,MathOperation 接口定义了一个抽象方法 operate,一个默认方法 log,和一个静态方法 infoMain 类实现了函数式接口,并展示了如何使用接口的不同方法。 

二、JDK9接口中新增的方法

JDK 9 在接口方面的改进相对于 JDK 8 并不多,但是在整体 Java 平台和语言的功能上有一些显著的变化和新增特性。

私有方法(Private Methods)

JDK 9 允许接口中定义私有方法,这些方法只能在接口内部使用,对实现类和其他类不可见。这使得接口能够更好地组织和重用代码逻辑。

interface MyInterface {default void publicMethod() {// 可调用私有方法privateMethod();}private void privateMethod() {// 接口内部私有方法的实现}
}

接口中的静态私有方法(Static Private Methods)

除了实例私有方法,JDK 9 还引入了接口中的静态私有方法,这些方法可以在接口的静态方法和默认方法中重复使用。

interface MyInterface {static void staticMethod() {// 可调用静态私有方法staticPrivateMethod();}private static void staticPrivateMethod() {// 接口内部静态私有方法的实现}
}

兼容性注解(@Deprecated, @DeprecatedSince)

JDK 9 引入了两个新的注解 @Deprecated@DeprecatedSince,用于指定一个方法或接口已被弃用以及自从哪个版本开始弃用。

@Deprecated(since="9.0")
interface MyDeprecatedInterface {@Deprecated(since="9.0")void deprecatedMethod();
}

三、接口的应用

接口在Java中是一种非常重要的概念,它提供了一种定义方法签名而不实现方法体的方式,这使得接口在Java编程中具有广泛的应用场景和优势。

实现多态: 接口允许类在不同的上下文中具有不同的行为。通过实现相同的接口,不同的类可以按照自己的方式实现接口中的方法,从而实现多态性,增加代码的灵活性和可扩展性。

interface Animal {void makeSound();
}class Dog implements Animal {public void makeSound() {System.out.println("Woof");}
}class Cat implements Animal {public void makeSound() {System.out.println("Meow");}
}

 实现服务提供者接口: 接口可以用于定义服务的契约,不同的实现类可以提供不同的服务实现。这种模式在插件化和模块化系统中特别有用。

interface DatabaseConnector {void connect();
}class MySQLConnector implements DatabaseConnector {public void connect() {System.out.println("Connecting to MySQL database...");}
}class PostgreSQLConnector implements DatabaseConnector {public void connect() {System.out.println("Connecting to PostgreSQL database...");}
}

 解耦合: 接口有助于解耦合,即减少代码间的依赖性。程序员可以编写针对接口的代码,而不是具体的实现类,从而使得代码更容易维护和扩展。

interface Logger {void log(String message);
}class FileLogger implements Logger {public void log(String message) {// Log message to file}
}class ConsoleLogger implements Logger {public void log(String message) {// Log message to console}
}

 实现回调机制: 接口可以用于实现回调机制,即某个对象在特定事件发生时调用另一个对象的方法。这在事件驱动编程和异步处理中非常常见。

interface Callback {void onComplete(String result);
}class Task {void execute(Callback callback) {// Perform some task and invoke callbackcallback.onComplete("Task completed successfully");}
}

函数式接口和Lambda表达式: Java 8 引入了函数式接口的概念,即只包含一个抽象方法的接口。这种接口可以用Lambda表达式来实现,提供了更加简洁和灵活的函数式编程方式。 

@FunctionalInterface
interface MyFunction {void perform();
}public class Main {public static void main(String[] args) {MyFunction func = () -> System.out.println("Performing function");func.perform();}
}

四、适配器设计模式

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的对象可以相互合作。适配器模式通常用于旧接口与新系统之间的适配,或者不同接口之间的适配。

结构和角色

适配器模式涉及以下几个角色:

  • 目标接口(Target): 目标接口是客户端期待使用的接口。客户端通过目标接口与适配器交互,调用在目标接口中定义的方法。

  • 适配器(Adapter): 适配器实现了目标接口,并且包装了一个被适配者(Adaptee)。它将客户端的请求转换为对被适配者的相应调用。

  • 被适配者(Adaptee): 被适配者是原本存在的接口,但它与客户端要求的接口不兼容。适配器通过包装被适配者,使其与客户端能够兼容。

工作原理和应用场景

适配器模式的工作原理是通过创建一个中间层(适配器),将客户端的请求转换为被适配者可以理解的请求。这种模式常见于以下几种情况:

  • 系统升级与兼容:当系统进行升级或者集成时,可能需要与旧系统进行适配,以保证新旧系统能够无缝衔接。

  • 第三方库或组件的使用:当使用第三方库或组件时,其接口可能与当前系统的接口不匹配,需要通过适配器进行适配。

  • 接口的转换:当需要将一个接口转换成另一个接口时,可以使用适配器模式。

示例:

// 目标接口
interface Smartphone {void charge();
}// 被适配者(电子书阅读器)
class EBookReader {void powerOn() {System.out.println("EBookReader is powering on.");}void turnPage() {System.out.println("EBookReader is turning the page.");}
}// 适配器
class EBookReaderAdapter implements Smartphone {private EBookReader reader;EBookReaderAdapter(EBookReader reader) {this.reader = reader;}@Overridepublic void charge() {reader.powerOn();System.out.println("Charging EBookReader...");}
}// 客户端代码
public class Client {public static void main(String[] args) {EBookReader kindle = new EBookReader();Smartphone smartphone = new EBookReaderAdapter(kindle);smartphone.charge(); // 使用智能手机充电}
}

 在上面的示例中,EBookReader是被适配者,它有自己的一些方法,但是没有charge()方法。通过EBookReaderAdapter适配器,我们实现了Smartphone接口,并在charge()方法中调用了EBookReader的方法,从而将其适配成了一个智能手机可以使用的接口。

相关文章:

java面向对象进阶进阶篇--《JDK8,JDK9接口中新增的方法、接口的应用、适配器设计模式》

个人主页→VON 收录专栏→java从入门到起飞 接口→接口和接口与抽象类综合案例 一、JDK8接口中新增的方法 在JDK 8中,接口新增了几个重要的特性和方法,其中最显著的是默认方法(Default Methods)和静态方法(Static Met…...

15.2 zookeeper java client

15.2 zookeeper java client 1. Zookeeper官方1.1 依赖1.2 Zookeeper客户端连接测试1.3***************************************************************************************1. Zookeeper官方 1.1 依赖 <!-- 集成方式一:官方集成zookeeper依赖 --><dependenc…...

素材管理太繁琐?有这一个就够了!

引言&#xff1a; 在创意行业中&#xff0c;素材管理一直是设计师们的痛点。从灵感的捕捉到作品的完成&#xff0c;每一步都离不开素材的积累与整理。然而&#xff0c;传统的素材管理方式往往繁琐且效率低下&#xff0c;让人头疼不已。今天&#xff0c;我要介绍的这款智能素材管…...

KubeSphere 部署向量数据库 Milvus 实战指南

作者&#xff1a;运维有术星主 Milvus 是一个为通用人工智能&#xff08;GenAI&#xff09;应用而构建的开源向量数据库。它以卓越的性能和灵活性&#xff0c;提供了一个强大的平台&#xff0c;用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索&#xff0c;并以…...

前端canvas——贝塞尔曲线

曲线之美&#xff0c;不在于曲线本身&#xff0c;而在于用的人。 所以就有了这期贝塞尔曲线。 新规矩&#xff0c;先上个GIT。 效果图 开局一张图&#xff0c;代码全靠编。 代码 画骨 先想着怎么画一个心形吧&#xff0c;等你想好了&#xff0c;就知道怎么画了。 首先就还…...

Elasticsearch模糊查询之Wildcard

{“wildcard” : { “LPR.keyword” : { “wildcard” : “${Keyword}”} }},你的示例中使用了 wildcard 查询&#xff0c;它适用于模糊搜索&#xff0c;允许使用通配符&#xff08;* 和 ?&#xff09;来匹配字段值。你使用了 keyword 子字段来确保精确匹配&#xff0c;这是一…...

【人工智能】穿越科技迷雾:解锁人工智能、机器学习与深度学习的奥秘之旅

文章目录 前言一、人工智能1. 人工智能概述a.人工智能、机器学习和深度学习b.人工智能发展必备三要素c.小案例 2.人工智能发展历程a.人工智能的起源b.发展历程 3.人工智能的主要分支 二、机器学习1.机器学习工作流程a.什么是机器学习b.机器学习工作流程c.特征工程 2.机器学习算…...

Nginx服务 rewrite、proxy_pass 用rewrite去除URL中的特定参数

Nginx 是一个高性能的开源反向代理服务器&#xff0c;可以用于处理跨域请求、负载均衡和缓存等功能。在本文中&#xff0c;我们将介绍如何使用 Nginx 配置文件来实现反向代理。 我们可以实现跨域请求的处理&#xff0c;同时保护用户的隐私和安全。此外&#xff0c;Nginx 还…...

RocketMQ事务消息机制原理

RocketMQ工作流程 在RocketMQ当中&#xff0c;当消息的生产者将消息生产完成之后&#xff0c;并不会直接将生产好的消息直接投递给消费者&#xff0c;而是先将消息投递个中间的服务&#xff0c;通过这个服务来协调RocketMQ中生产者与消费者之间的消费速度。 那么生产者是如何…...

【C++】选择结构- 嵌套if语句

嵌套if语句的语法格式&#xff1a; if(条件1) { if(条件1满足后判断是否满足此条件) {条件2满足后执行的操作} else {条件2不满足执行的操作} } 下面是一个实例 #include<iostream> using namespace std;int main4() {/*提示用户输入一个高考分数&#xff0c;根据分…...

scrapy解决管道阻塞问题采用threadpool库线程池+twisted同步语法异步编程

实现方法&#xff1a;process_item和download任务函数像下面编写即可&#xff0c;其他管道像往常一样写法 import time import threadpool import random from twisted.internet import deferclass VideoPipeline:def __init__(self):self.pool threadpool.ThreadPool(10) # …...

Axure RP:打造动态交互的大屏可视化设计利器

Axure大屏可视化是指使用Axure RP这款原型设计工具来创建具有视觉冲击力和数据展示功能的大屏幕界面。Axure以其强大的交互设计和丰富的组件库&#xff0c;成为了实现大屏可视化的重要工具之一。以下是对Axure大屏可视化的详细阐述&#xff1a; 一、Axure在大屏可视化中的优势 …...

“八股文”在实际工作中是助力、阻力还是空谈

目录 1.概述 1.1.对实际工作的助力 1.2.存在的问题 2.“八股文”对招聘过程的影响 2.1.“八股文”在筛选候选人时的作用 2.2.面试中的比重及其合理性 2.3.如何平衡“八股文”与实际编程能力的考察 3.“八股文”在日常工作中的实用价值 3.1.在团队协作环境中进行有效沟…...

项目开发:@ControllerAdvice注解的基本应用

目录 简介基本用法全局异常处理全局拦截器全局数据绑定 注解参数1.value(): String[]2.basePackages(): String[]3.basePackageClasses(): Class<?>[]4.assignableTypes(): Class<?>[]5.annotations(): Class<? extends Annotation>[] 三.注解组成总结 简…...

Jmeter三种方式获取数组中多个数据并将其当做下个接口参数入参【附带JSON提取器和CSV格式化】

目录 一、传统方式-JOSN提取器获取接口返回值 1、接口调用获取返回值 2、添加JSON提取器 3、调试程序查看结果 4、添加循环控制器 5、设置count计数器 6、添加请求 7、执行请求 二、CSV参数化 1、将结果写入后置处理程序 2、设置循环处理器 3、添加CSV文件 4、设置…...

C++入门基础:C++中的循环语句

循环语句是编程语言中用来重复执行一段代码直到满足特定条件的一种控制结构。它们对于处理需要重复任务的场景非常有用&#xff0c;比如遍历数组、累加数值、重复执行某项操作直到满足条件等。 但是在使用循环语句的时候需要注意下哈&#xff0c;有时候一不小心会构成死循环或者…...

VUE 基础(二)

1 v-show:根据表达值的真假&#xff0c;切换元素的显示和隐藏 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…...

VMware Cloud Foundation ESXi 主机

一、准备嵌套 ESXi 主机环境# 1)物理 ESXi 主机信息 本次准备用于部署 VCF 嵌套实验环境的物理宿主机的配置信息如下图所示。其实,部署 VCF 环境主要对内存的大小要求比较高,部署完整的管理域相关组件下来差不多就要占用 200 GB左右内存,而对 CPU 和存储的需求可以根据实…...

PyTorch深度学习快速入门(下)

PyTorch深度学习快速入门&#xff08;下&#xff09; 一、现有网络模型的使用及修改&#xff08;一&#xff09;背景知识&#xff08;二&#xff09;修改网络模型的三种方法 二、网络模型的保存与加载&#xff08;一&#xff09;保存网络模型的两种方法&#xff08;二&#xff…...

轻松入门Linux—CentOS,直接拿捏 —/— <1>

一、什么是Linux Linux是一个开源的操作系统&#xff0c;目前是市面上占有率极高的服务器操作系统&#xff0c;目前其分支有很多。是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统 Linux能运行主要的UNIX工具软件、应用程序和网络协议 Linux支持 32…...

pandas安装以及导入CSV

安装pandas pip install pandas速度慢可以切换国内镜像源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas执行导入csv操作 import pandas as pd# 读取csv文件 data pd.read_csv(yourPath)输入data查看数据 导入成功&#xff01;...

新能源车浪潮来袭,同时存在高压低压系统,如何准确进行高低压布线间距EMC分析?

摘要 随着车辆电气化水平的逐步提升&#xff0c;电气零部件布局和布线面临着前所未有的挑战&#xff0c;在不断的压缩电气零部件间间距后&#xff0c;EMC性能成为非常关键的性能指标。特别是对于新能源车型&#xff0c;同时存在高压和低压系统&#xff0c;高低压耦合若处理的不…...

QUIC 协议

详解 QUIC 协议&#xff1a;它为何比 TCP 更优越&#xff1f;...

【软件测试】--接口测试

1. 接口用例设计 接口测试的测试点 功能测试 单接口功能&#xff1a; 手工测试中的单个业务模块&#xff0c;一般对应一个接口 登陆业务 --> 登陆接口加入购物车业务 --> 加入购物车接口订单业务 --> 订单接口支付业务 --> 支付接口 借助工具、代码。绕开前端界面…...

【前端】上传视频,截取第一帧图片

使用input上传视频&#xff0c;获得视频的第一帧 参考&#xff1a;JavaScript获取视频的尺寸信息和第一帧图片 - 掘金 (juejin.cn) html&#xff1a; <inputbind:this{uploadRef}on:change{handleUpload}accept"video/*"type"file"/>视频类型校验&a…...

Redis-GEO数据结构的基本用法

GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0c;包含&#xff1a;经度…...

【Linux C | 网络编程】进程池大文件传输的实现详解(三)

上一篇实现了进程池的小文件传输&#xff0c;使用自定义的协议&#xff0c;数据长度数据本身&#xff0c;类似小火车的形式&#xff0c;可以很好的解决TCP“粘包”的问题。 【Linux C | 网络编程】进程池小文件传输的实现详解&#xff08;二&#xff09; 当文件的内容大小少于…...

Mac如何通过SSH连接Github

目录 前言 一、实现步骤 1.生成 SSH 密钥对 2.添加 SSH 密钥到 GitHub&#xff1a; 3.配置 SSH 连接 1.更新远程仓库 URL 2.测试 SSH 连接 前言 GitHub 在 2021 年 8 月 13 日停止了对使用密码进行身份验证的支持。因此&#xff0c;你需要使用其他认证方式&#xff0c;如…...

成就巴西休闲游戏如何借助Google谷歌广告投放优势

在探讨巴西休闲游戏如何借助谷歌广告投放优势实现市场扩张的过程中&#xff0c;我们不得不深入分析巴西市场的独特属性、休闲游戏的兴起背景&#xff0c;以及谷歌广告平台在全球范围内的强大影响力。近年来&#xff0c;随着移动游戏市场的快速发展&#xff0c;特别是中轻度休闲…...

利用python检查磁盘空间使用情况

目录 一.前言 二.使用的库介绍 三.代码实现以及解析 3.1导入模块 3.2邮件发送函数 send_email 3.3检查磁盘空间函数 check_and_clean_disk 3.4主程序逻辑 四.致谢 一.前言 在信息技术飞速发展的今天&#xff0c;数据量的激增使得磁盘空间管理成为系统运维中的一项基…...

卷积神经网络(五)---图像增强的方法

前面的部分专注于卷积神经网络的层结构介绍&#xff0c;同时还介绍了到目前为止比较出名的卷积神经网络&#xff0c;接着使用比较复杂的卷积神经网络提高了 MNIST 数据集的准确率。下面将从另外的角度——图像增强的方面入手&#xff0c;提高模型的准确率和泛化能力。 一直以来…...

矩阵常见分解算法及其在SLAM中的应用

文章目录 常见特殊矩阵定义Cholesky分解&#xff08;正定Hermittian矩阵&#xff0c;分解结果唯一&#xff09;Cholesky分解应用 SVD分解&#xff08;将singularvalues排序后分解唯一&#xff09;SVD 分解的应用&#xff08;任意矩阵&#xff09; QR分解&#xff08;任意矩阵&a…...

【排序】快速排序详解

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;排序 个人主页&#xff1a;Celias blog~ 一、快速排序的思想 快速排序的核心思想是&#xff1a; 选定一个…...

贪心算法总结(2)

一、买卖股票的最佳时机 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(vector<int>& prices) {int miniINT_MAX;int ret0;for(int&price:prices){//遍历的时候&#xff0c;我们随时去更新最小的值&#xff0c;然后让每一位…...

弘景光电:技术实力与创新驱动并进

在光学镜头及摄像模组产品领域&#xff0c;广东弘景光电科技股份有限公司&#xff08;以下简称“弘景光电”&#xff09;无疑是一颗耀眼的明星。自成立以来&#xff0c;弘景光电凭借其强大的研发实力、卓越的产品性能、精密的制造工艺以及严格的质量管理体系&#xff0c;在光学…...

2024年7月23日~2024年7月29日周报

目录 一、前言 二、完成情况 2.1 一种具有边缘增强特点的医学图像分割网络 2.2 融合边缘增强注意力机制和 U-Net 网络的医学图像分割 2.3 遇到的困难 三、下周计划 一、前言 上周参加了一些师兄师姐的论文讨论会议&#xff0c;并完成了初稿。 本周继续修改论文&#xff0…...

M3U8流视频数据爬虫

M3U8流视频数据爬虫 HLS技术介绍 现在大部分视频客户端都采用HTTP Live Streaming&#xff08;HLS&#xff0c;Apple为了提高流播效率开发的技术&#xff09;&#xff0c;而不是直接播放MP4等视频文件。HLS技术的特点是将流媒体切分为若干【TS片段】&#xff08;比如几秒一段…...

保护您的数字财富:模块化沙箱在源代码防泄露中的突破

在数字化浪潮中&#xff0c;企业面临着前所未有的数据安全挑战。源代码、商业机密、客户数据……这些宝贵的数字资产一旦泄露&#xff0c;后果不堪设想。SDC沙盒防泄密系统&#xff0c;以其卓越的技术实力和创新的解决方案&#xff0c;为企业提供了一个坚不可摧的安全屏障。 核…...

FFmpeg源码:avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析

一、引言 AVIOContext是FFmpeg&#xff08;本文演示用的FFmpeg源码版本为5.0.3&#xff09;中的字节流上下文结构体&#xff0c;用来管理输入输出数据。打开一个媒体文件的时候&#xff0c;需要先把数据从硬盘读到缓冲区&#xff0c;然后会用到AVIOContext中的如下成员&#x…...

如何使用 API 查看极狐GitLab 镜像仓库中的镜像?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…...

软件-vscode-plantUML-IDEA

文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 &#xff08;包括spring data jpa和sqlLite连接&#xff09; PlantUMLIDEA下载及安装Eval Reset插件配置修改IDEA创建项目的默认目录IDEA配置gitIDEA翻译插件translationIDEA断点调试IDEA全局搜索快捷键不能使用代…...

ES6语法详解,面试必会,通俗易懂版

目录 Set的基本使用WeakSet 使用Set 和 WeakSet 区别内存泄漏示例&#xff1a;使用普通 Set 保存 DOM 节点如何避免这个内存泄漏MapWeakMap 的使用 Set的基本使用 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&a…...

CTFshow--Web--代码审计

目录 web301 web302 web303 web304 web305 web306 web307 web308 web309 web310 web301 开始一个登录框, 下意识sql尝试一下 发现 1 的时候会到一个 checklogin.php 的路径下, 但啥也没有 好吧, 这是要审计代码的 ,下载好源码, 开始审计 看了一下源码 , 应该就是sql…...

Java语言程序设计——篇十(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 接口介绍 接口概述接口定义接口的实现实战演练 &#x1f445;接口的继承实战演练实战演练 接口的类型常量实战演练 静态方法默认方法解决默认方…...

Qt对比MFC优势

从Qt小白到现在使用了有四年的时间&#xff0c;之前也搞过MFC,WinForm,基本上都是桌面的框架&#xff0c; 从难易程度看MFC>QT>WinForm; 运行的效率上来看MFC>QT>WinForm; 开发效率上WinForm>QT>MFC; 跨平台Qt首选&#xff1b; 界面的美观难易程度Qt>…...

RuntimeError: No CUDA GPUs are available

RuntimeError: No CUDA GPUs are available 目录 RuntimeError: No CUDA GPUs are available 【常见模块错误】 【解决方案】 解决步骤如下&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科…...

URL参数中携带中文?分享 1 段优质 JS 代码片段!

本内容首发于工粽号&#xff1a;程序员大澈&#xff0c;每日分享一段优质代码片段&#xff0c;欢迎关注和投稿&#xff01; 大家好&#xff0c;我是大澈&#xff01; 本文约 800 字&#xff0c;整篇阅读约需 1 分钟。 今天分享一段优质 JS 代码片段&#xff0c;在发送 ajax 请…...

sass的使用

一、变量 //声明一个变量 $highlight-color: #F90; .selected {border: 1px solid $highlight-color; }//编译后 .selected {border: 1px solid #F90; }二、导入 import "xxx.scss"三、混合器简单定义 通过mixin定义&#xff0c;通过include调用 // mixin.scss /…...

【足球走地软件】走地数据分析预测【大模型篇】走地预测软件实战分享

了解什么是走地数据&#xff1f; 走地数据分析&#xff0c;在足球赛事的上下文中&#xff0c;是一种针对正在进行中的比赛进行实时数据分析的方法。这种方法主要用于预测比赛中的某些结果或趋势&#xff0c;如总进球数、比分变化、球队表现等。 在足球走地数据分析中&#xf…...

现在有什么赛道可以干到退休?

最近&#xff0c;一则“90后无论男女都得65岁以后退休”的消息在多个网络平台流传&#xff0c;也不知道是真是假&#xff0c;好巧不巧今天刷热点的时候又看到一条这样的热点&#xff1a;现在有什么赛道可以干到退休&#xff1f; 点进去看了几条热评&#xff0c;第一条热评说的…...