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

java中的枚举

第1部分:引言

枚举在Java中的重要性

枚举在Java中扮演着至关重要的角色,它不仅提高了代码的可读性和可维护性,还增强了类型安全。枚举的使用可以避免使用魔法数字或散列常量,这些在代码中通常难以理解和维护。通过枚举,我们可以将一组相关的常量组织在一起,形成一个清晰的逻辑结构。

第2部分:枚举的属性和方法

枚举常量的属性

枚举常量可以拥有自己的属性,这些属性通常在枚举的构造函数中初始化。属性的使用增强了枚举的表达能力,使得每个枚举实例可以携带更多的信息。

public enum Planet {MERCURY(3.303e+23, 57.9),VENUS(4.869e+24, 243),EARTH(5.976e+24, 149.6),MARS(6.421e+23, 227.9),JUPITER(1.9e+27, 4.23);private final double mass; // 质量,单位:千克private final double radius; // 半径,单位:千米Planet(double mass, double radius) {this.mass = mass;this.radius = radius;}public double getMass() {return mass;}public double getRadius() {return radius;}
}
枚举的方法

枚举类型可以定义自己的方法,这些方法可以访问枚举常量的属性,执行特定的逻辑,或者返回计算结果。

public double getSurfaceGravity() {// 表面重力加速度公式:g = G * mass / radius^2final double G = 6.67300E-11;return G * mass / (radius * radius);
}
枚举的构造函数

枚举的构造函数是私有的,这意味着枚举常量只能在枚举体内被实例化。这保证了枚举常量是唯一的。

private Planet(double mass, double radius) {this.mass = mass;this.radius = radius;
}
枚举的values()方法

values()方法返回枚举类型的所有常量的数组。这个方法通常用于遍历枚举类型的所有常量。

for (Planet p : Planet.values()) {System.out.println(p.name() + " has a mass of " + p.getMass());
}
枚举的valueOf()方法

valueOf()方法接受一个字符串参数,并返回对应的枚举常量。如果字符串不匹配任何枚举常量,将抛出IllegalArgumentException

Planet earth = Planet.valueOf("EARTH");
System.out.println("The radius of " + earth.name() + " is " + earth.getRadius());
枚举与Java反射API

Java的反射API可以用于枚举类型,以获取枚举常量的名称、字段值、方法等信息。这对于编写需要动态操作枚举类型的应用程序非常有用。

for (Planet p : Planet.values()) {Method[] methods = p.getClass().getDeclaredMethods();for (Method method : methods) {if (Modifier.isPublic(method.getModifiers()) && !method.isSynthetic()) {try {System.out.println(p.name() + "." + method.getName() + "() = " + method.invoke(p));} catch (Exception e) {e.printStackTrace();}}}
}
枚举与Java注解

枚举类型可以像其他类一样使用注解。注解可以用于元数据的添加,例如,标记某个枚举常量为“已废弃”。

@Deprecated
public enum OldPlanet {PLUTO;
}
枚举的toString()方法

枚举常量默认的toString()方法返回枚举常量的名称。如果需要自定义返回值,可以重写toString()方法。

@Override
public String toString() {return "Planet{" +"name='" + name() + '\'' +", mass=" + mass +", radius=" + radius +'}';
}

第3部分:枚举与switch语句

简介

Java中的switch语句是一种控制流语句,用于基于不同的情况执行不同的代码块。在Java 7之前,switch语句只能用于基本数据类型(如int、char等),或者字符串。从Java 7开始,switch语句也可以用于枚举类型,这使得基于枚举的代码更加清晰和易于维护。

使用switch语句处理枚举

在枚举类型出现之前,开发者通常使用if-else语句或散列映射来处理一组固定的常量。枚举的出现,使得使用switch语句成为可能,这不仅使代码更加简洁,而且提高了可读性。

public enum TrafficSignal {GREEN, YELLOW, RED;
}public void reactToTrafficSignal(TrafficSignal signal) {switch (signal) {case GREEN:System.out.println("Go");break;case YELLOW:System.out.println("Slow down");break;case RED:System.out.println("Stop");break;}
}
switch语句的优势
  • 可读性switch语句的结构清晰,易于理解。
  • 维护性:当枚举类型中的常量发生变化时,IDE可以帮助开发者快速定位到所有使用该枚举的地方,进行相应的修改。
  • 性能:Java编译器可能会将switch语句优化为跳转表,从而提高执行效率。
枚举常量作为switch语句的表达式

除了使用枚举变量作为switch语句的控制表达式外,也可以直接使用枚举常量。

switch (TrafficSignal.GREEN) {case GREEN:System.out.println("Proceed with caution");break;// 其他情况可以省略,因为GREEN是唯一的入口点
}
枚举方法与switch语句的结合

枚举可以定义方法,这些方法可以与switch语句结合使用,实现更复杂的逻辑。

public enum Operation {PLUS {public double apply(double x, double y) { return x + y; }},MINUS {public double apply(double x, double y) { return x - y; }},TIMES {public double apply(double x, double y) { return x * y; }},DIVIDE {public double apply(double x, double y) {if (y != 0) return x / y;else throw new IllegalArgumentException("Division by zero.");}};public abstract double apply(double x, double y);
}public double performOperation(Operation op, double a, double b) {return op.apply(a, b);
}
switch语句与枚举的局限性

尽管switch语句与枚举的结合非常强大,但它也有一些局限性。例如,如果枚举常量很多,switch语句可能会变得非常长,难以维护。此外,如果需要基于多个条件进行判断,switch语句可能不如策略模式等设计模式灵活。

示例:模拟交通信号灯

假设我们需要模拟一个交通信号灯的控制系统,使用枚举和switch语句可以清晰地表达信号灯的状态变化。

public class TrafficLightController {private TrafficSignal signal = TrafficSignal.RED;public void changeSignal() {switch (signal) {case RED:signal = TrafficSignal.GREEN;System.out.println("The traffic light is now GREEN.");break;case GREEN:signal = TrafficSignal.YELLOW;System.out.println("The traffic light is now YELLOW.");break;case YELLOW:signal = TrafficSignal.RED;System.out.println("The traffic light is now RED.");break;}}
}

第4部分:枚举的迭代

枚举迭代简介

迭代枚举类型是Java中一种常见的操作,它允许开发者遍历枚举类型中的所有常量。Java为枚举类型提供了内置的迭代机制,使得遍历枚举变得异常简单和高效。

使用values()方法进行迭代

values()方法返回枚举类型的所有常量数组,可以用于传统的for循环迭代。

public enum Weekday {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
}public void listWeekdays() {for (Weekday day : Weekday.values()) {System.out.println(day);}
}
使用for-each循环迭代枚举

除了使用values()方法外,Java的for-each循环可以直接迭代枚举类型。

for (Weekday day : Weekday.values()) {System.out.println(day);
}
枚举迭代的应用场景

枚举迭代在多种场景下都非常有用,例如配置管理、状态机实现、日志级别控制等。

示例:配置管理

假设有一个应用程序,需要根据不同的配置级别来调整日志记录的详细程度。

public enum LogLevel {DEBUG, INFO, WARN, ERROR;public boolean shouldLog(LogLevel level) {return compareTo(level) >= 0;}
}public class Logger {private LogLevel currentLevel = LogLevel.INFO;public void log(LogLevel level, String message) {if (currentLevel.shouldLog(level)) {System.out.println(level + ": " + message);}}
}
示例:状态机实现

使用枚举迭代可以方便地实现状态机的状态转换。

public enum State {INITIALIZING, RUNNING, PAUSED, STOPPED;public State next() {switch (this) {case INITIALIZING:return RUNNING;case RUNNING:return PAUSED;case PAUSED:return RUNNING;case STOPPED:return null;default:throw new IllegalStateException("Unknown state: " + this);}}
}public class StateMachine {private State currentState = State.INITIALIZING;public void nextState() {currentState = currentState.next();System.out.println("Transitioned to state: " + currentState);}
}
枚举迭代与Java 8的Stream API

Java 8引入了Stream API,它提供了一种声明式处理集合数据的方式。枚举类型也可以与Stream API结合使用,实现更高级的数据处理。

import java.util.stream.Stream;public void processWeekdays() {Stream.of(Weekday.values()).filter(Weekday::isAfterMonday).forEach(System.out::println);
}// 在Weekday枚举中添加一个方法
public boolean isAfterMonday() {return ordinal() > MONDAY.ordinal();
}
枚举迭代与反射

虽然不推荐在枚举中使用反射进行迭代,但在某些动态场景下,反射可以用来获取枚举类型的所有常量。

public void listWeekdaysUsingReflection() {Object[] days = Weekday.class.getEnumConstants();for (Object day : days) {System.out.println(day);}
}
枚举迭代的局限性

尽管枚举迭代非常强大,但它也有局限性。例如,迭代过程中不能修改枚举常量的列表,也不能在迭代过程中添加或删除枚举常量。

第5部分:枚举与单例模式

单例模式简介

单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式有多种方法,但使用枚举来实现单例是最简单和最安全的方式之一。

使用枚举实现单例

Java语言规范保证每个枚举常量只会被实例化一次,这使得枚举成为实现单例模式的理想选择。

public enum DatabaseConnection {INSTANCE;private String connectionString;private DatabaseConnection() {// 初始化数据库连接字符串connectionString = "jdbc:mysql://localhost:3306/mydb";}public String getConnectionUrl() {return connectionString;}
}
枚举单例的优势
  • 线程安全:枚举实例的创建是线程安全的。
  • 序列化安全:枚举类型是序列化安全的,每个枚举常量在反序列化时都会返回枚举本身。
  • 防止反射攻击:枚举类型不允许通过反射创建枚举实例。
枚举单例的使用示例
public class DatabaseUtil {public static void printConnectionUrl() {System.out.println(DatabaseConnection.INSTANCE.getConnectionUrl());}
}
枚举单例与延迟初始化

虽然枚举单例在实例化时会立即初始化,但可以通过构造函数参数或方法来实现延迟初始化。

public enum Config {INSTANCE;private String configValue;private Config() {// 延迟加载配置值loadConfig();}private void loadConfig() {configValue = "Some configuration value loaded at runtime";}public String getConfigValue() {return configValue;}
}
枚举单例与多例模式

虽然枚举天然支持单例模式,但也可以扩展为支持多例模式,即每个枚举实例持有不同的状态。

public enum Counter {COUNTER1, COUNTER2, COUNTER3;private int count = 0;public void increment() {count++;}public int getCount() {return count;}
}
枚举单例与依赖注入

枚举单例可以作为依赖注入的实现方式之一,尤其是在需要全局访问点的场景中。

public enum DependencyInjector {INSTANCE;private SomeService service;private DependencyInjector() {service = new SomeServiceImpl();}public SomeService getService() {return service;}
}
枚举单例与Java 8的Optional类

枚举单例可以与Java 8的Optional类结合使用,提供更优雅的API。

public enum ResourceHolder {INSTANCE;private Resource resource;public Optional<Resource> getResource() {return Optional.ofNullable(resource);}public void setResource(Resource resource) {this.resource = resource;}
}
枚举单例的局限性

尽管枚举单例提供了许多优势,但它也有一些局限性,例如枚举类型不能被继承,这限制了某些设计模式的应用。

第6部分:枚举与Java集合框架

枚举与集合框架简介

Java集合框架是Java中用于存储和操作集合数据的一套丰富接口和类。枚举类型可以作为集合元素,与集合框架结合使用,实现高效的数据存储和操作。

枚举作为集合元素

由于枚举类型在Java中是单例的,它们可以安全地用作集合的元素,而不必担心重复或不一致的问题。

示例:使用枚举管理权限
public enum Permission {READ, WRITE, DELETE, ADMIN;
}public class User {private Set<Permission> permissions = new HashSet<>();public void grantPermission(Permission permission) {permissions.add(permission);}public void revokePermission(Permission permission) {permissions.remove(permission);}public boolean hasPermission(Permission permission) {return permissions.contains(permission);}
}
枚举集合的性能考量

由于枚举实例是固定的,枚举作为集合元素时,可以提供非常快速的查找、插入和删除操作。

示例:枚举集合的性能测试
public class EnumSetPerformanceTest {public static void main(String[] args) {EnumSet<Permission> permissions = EnumSet.noneOf(Permission.class);long startTime = System.nanoTime();for (int i = 0; i < 1000000; i++) {permissions.add(Permission.ADMIN);}long endTime = System.nanoTime();System.out.println("Time taken: " + (endTime - startTime) + " ns");}
}
枚举与不可变集合

枚举的不变性使得它们非常适合用作不可变集合的元素,这样可以确保集合的状态不会因为外部修改而改变。

示例:创建不可变的权限集合
public class ImmutablePermissions {private final Set<Permission> permissions;public ImmutablePermissions(Set<Permission> permissions) {this.permissions = Collections.unmodifiableSet(new HashSet<>(permissions));}public Set<Permission> getPermissions() {return permissions;}
}
枚举与Java 8的Stream API

结合Java 8的Stream API,枚举可以用于创建更声明式的数据处理流程。

示例:使用Stream API处理权限
public class PermissionStreamProcessor {public static void main(String[] args) {List<Permission> permissions = Arrays.asList(Permission.values());permissions.stream().filter(Permission::isDangerous).forEach(p -> System.out.println("Permission granted: " + p));}
}// 在Permission枚举中添加一个方法
public boolean isDangerous() {return this == Permission.ADMIN || this == Permission.DELETE;
}
枚举与自定义集合类

开发者可以创建自定义的集合类,使用枚举类型作为元素,以满足特定的需求。

示例:自定义枚举集合类
public class EnumMap<K extends Enum<K>, V> {private final Map<K, V> map = new HashMap<>();public void put(K key, V value) {map.put(key, value);}public V get(K key) {return map.get(key);}
}
枚举与集合的序列化

枚举类型是序列化安全的,这意味着枚举集合也可以安全地进行序列化和反序列化。

示例:序列化枚举集合
public class SerializableEnumSet {private EnumSet<Permission> permissions;public SerializableEnumSet(EnumSet<Permission> permissions) {this.permissions = permissions;}private Object readResolve() {return EnumSet.copyOf(permissions);}
}

欢迎关注VX
在这里插入图片描述

相关文章:

java中的枚举

第1部分&#xff1a;引言 枚举在Java中的重要性 枚举在Java中扮演着至关重要的角色&#xff0c;它不仅提高了代码的可读性和可维护性&#xff0c;还增强了类型安全。枚举的使用可以避免使用魔法数字或散列常量&#xff0c;这些在代码中通常难以理解和维护。通过枚举&#xff…...

各种开发语言运行时占用内存情况比较

随着科技的发展&#xff0c;编程语言种类繁多&#xff0c;不同的编程语言在运行时的内存占用情况各不相同。了解这些差异对于开发者选择合适的编程语言尤为重要。本文将讨论几种主流编程语言在运行时的内存占用情况&#xff0c;包括C、C、Java、Python和Go等。 1. C语言 内存…...

【基础知识10】label与input标签

label标签说明 HTML元素表示用户界面中某个元素的说明 将一个和一个元素相关联主要有这些优点&#xff1a; 标签文本不仅与其相应的文本输入元素在视觉上相关联&#xff0c;程序中也是如此。这意味着&#xff0c;当用户聚焦到这个表单输入元素时&#xff0c;屏幕阅读器可以读…...

【SDV让汽车架构“和而不同”】

昔日以“排气管数量”和“发动机动力”为骄傲的荣耀已然成为过往。在这个崭新的时代&#xff0c;特斯拉、理想、蔚来、小鹏、零跑等新兴的汽车制造商纷纷推出了搭载可交互大屏、实现万物互联、软件功能持续更新的新车型&#xff0c;它们被誉为“车轮上的智能手机”。同时&#…...

面试经验分享 | 驻场安全服务工程师面试

所面试的公司&#xff1a;某安全厂商 所在城市&#xff1a;浙江宁波 面试职位&#xff1a;驻场安全服务工程师 面试官的问题&#xff1a; 1、信息收集如何处理子域名爆破的泛解析问题&#xff1f; 泛域名解析是&#xff1a;*.域名解析到同一IP。域名解析是&#xff1a;子域…...

SpringBoot 学习笔记

文章目录 SpringBoot1 SpringBoot 的纯注解配置&#xff08;了解&#xff09;1.1 环境搭建1.1.1 jdbc配置1.1.2 mybatis配置1.1.3 transactional配置1.1.4 service配置1.1.5 springmvc配置1.1.6 servlet配置1.1.7 存在的问题 1.2 新注解说明1.2.1 Configuration1.2.2 Component…...

Android 13 为应用创建快捷方式

参考 developer.android.google.cn 创建快捷方式 来自官网的说明&#xff1a; 静态快捷方式 &#xff1a;最适合在用户与应用互动的整个生命周期内使用一致结构链接到内容的应用。由于大多数启动器一次仅显示四个快捷方式&#xff0c;因此静态快捷方式有助于以一致的方式执行…...

PTA—C语言期末复习(选择题)

1. 按照标识符的要求&#xff0c;&#xff08;A&#xff09;不能组成标识符。 A.连接符 B.下划线 C.大小写字母 D.数字字符 在大多数编程语言中&#xff0c;标识符通常由字母&#xff08;包括大写和小写&#xff09;、数字和下划线组成&#xff0c;但不能以数字开头&#xff0c…...

基于STM32的智能家用空气净化系统

目录 引言环境准备智能家用空气净化系统基础代码实现&#xff1a;实现智能家用空气净化系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;空气净化管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家用空气净化系…...

计算机图形学入门18:阴影映射

1.前言 前面几篇关于光栅化的文章中介绍了如何计算物体表面的光照&#xff0c;但是着色并不会进行阴影的计算&#xff0c;阴影需要单独进行处理&#xff0c;目前最常用的阴影计算技术之一就是Shadow Mapping技术&#xff0c;也就是俗称的阴影映射技术。 2.阴影映射 Shadow Map…...

电机应用相关名词介绍

1.电机转速 定义&#xff1a;电机转速指电机工作时旋转的速度&#xff0c;是衡量电机性能的重要指标之一。 单位&#xff1a; 每分钟转数&#xff08;RPM&#xff09;&#xff1a;即Revolutions Per Minute&#xff0c;表示电机每分钟旋转的圈数。 每秒转数&#xff08;RPS…...

哈尔滨等保测评解读

哈尔滨的信息系统安全等级保护测评&#xff08;简称“等保测评”&#xff09;是中国网络安全法规的一部分&#xff0c;旨在确保关键信息基础设施和其他重要信息系统的安全。下面是对哈尔滨等保测评的解读&#xff1a; 测评目的 等保测评的主要目的是评估信息系统是否满足国家规…...

python接口自动化的脚本

使用Requests库进行GET请求 Requests是Python中最常用的HTTP库,用于发送HTTP请求。下面是一个简单的GET请求示例,用于从API获取数据。 import requests url = "https://api.example.com/data" response = requests.get(url) if response.status_code == 200:prin…...

pdf转换成cad,这几个cad转换小妙招快码住!

在数字设计领域&#xff0c;PDF&#xff08;Portable Document Format&#xff09;和CAD&#xff08;Computer-Aided Design&#xff09;文件格式各有其独特之处。PDF常用于文件共享和打印&#xff0c;而CAD则是工程师和设计师们进行精确绘图和建模的必备工具。然而&#xff0c…...

计算机组成原理——系统总线

题目:计算机使用总线结构便于增减外设,同时__C____。 A.减少了信息传送量 B.提高了信息传输速度 C.减少了信息传输线的条数 1. 总线的分类 1.1. 片内总线 芯片内部的总线 在CPU芯片内部,寄存器与寄存器之间、寄存器与逻辑单元ALU之间 1.1.1. 数据总线 双向传输总线 数…...

2024年6月大众点评广州餐饮店铺POI分析20万家

2024年6月大众点评广州餐饮店铺POI共有199175家 店铺POI点位示例&#xff1a; 店铺id k9uiFADtAvs9EdPC 店铺名称 点都德(聚福楼店) 十分制服务评分 8.6 十分制环境评分 8.3 十分制划算评分 8.5 人均价格 77 评价数量 41673 店铺地址 惠福东路470号(富临食府对面) 大…...

【最佳实践】前端如何搭建自己的cli命令行工具,让自己编码的时候如虎添翼

作为前端开发人员&#xff0c;搭建自己的前端CLI工具是一个有趣且有意义的事情。以下是一篇详细的教程&#xff0c;包括使用场景和案例。 使用场景 假设你是一个前端团队的一员&#xff0c;需要频繁地在不同的项目中执行一些标准化的任务&#xff0c;比如&#xff1a; 根据模…...

未来一周比特币价格及数字货币市场预测

荷月的比特币市场就像过山车一样&#xff0c;仅仅六月下旬就跌去-12%&#xff0c;本周更是暴跌-6%&#xff0c;至 58,378美元。在这种市场表现&#xff0c;应有的踩踏如期而至。德国政府今日宣布再出售750 比特币的行为继续打击多头&#xff0c;但是小编认为这恰恰预示着市场可…...

Qt Quick 教程(二)

文章目录 今天分析一段代码1. 注册单例类型2. 注册普通QML类型3. 注册C++类型到Qt元对象系统4.总结,具体解释5.如何在QML中使用这些注册的类型参考今天分析一段代码 // Register typesqmlRegisterSingletonType(QUrl("qrc:/StyleSheet.qml"), "Librum.style&qu…...

10个实用的Python编程实例,助你快速掌握Python技巧!

作为一门简洁易学且强大的编程语言&#xff0c;Python广泛应用于各个领域。本文将向大家介绍10个实用的Python编程实例&#xff0c;通过详细的实例代码帮助读者快速掌握Python的基础知识和常用技巧。 1. 计算阶乘 def factorial(n):if n 0:return 1else:return n * factorial…...

为什么要本地化您的多媒体内容?

当我们访问网站、应用程序和社交媒体时&#xff0c;体验不再局限于陈旧的文本和静态图像。现代处理能力和连接速度提高了快速加载视频、音频和动画的可能性。 这一切都提供了更具沉浸感和互动性的用户体验。多媒体是数字营销中最有效的内容之一&#xff0c;因为它对用户更具吸…...

MMCV【mmclassification】 从0到1 之 Docker 容器环境搭建步骤总结

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 📙 Linux 下 Docker 安装环境检查Docker 安装 [ root 或者 sudo 权限用户可安装 ]给 普通用户 加入 Docker …...

深入探索Jetpack数据绑定(DataBinding)

Jetpack的数据绑定&#xff08;DataBinding&#xff09;库为我们提供了一个强大而灵活的工具&#xff0c;用于将UI组件与数据源绑定在一起。本文将深入探讨数据绑定的高级用法&#xff0c;包括双向绑定、自定义Binding Adapter、使用LiveData和ViewModel&#xff0c;以及如何处…...

vivado CELL_BLOAT_FACTOR、CFGBVS

CELL_BLOAT_FACTOR CELL_BLOAT_FACTOR属性用于指定添加“空白”或 增加单元格间距以增加分层单元格之间的放置距离 单元Vivado放置器会将模块中的单元隔开&#xff0c;以改善路由结果 设计。 当模块中的单元放置在一起时&#xff0c;可以使用单元膨胀&#xff0c;并且 从而在放…...

Linux—进程与计划管理

目录 一、程序 二、进程 1、什么是进程 2、进程的特点 3、进程、线程、携程 3.1、进程 3.2、线程 3.3、携程 三、查看进程信息 1、ps -aux 2、ps -elf 3、top ​3.2、输出内容详解 3.2.1、输出第一部分解释 3.2.2、输出第二部分解释 4、pgrep 5、pstree 四、进…...

整数智能与上海数据交易所携手,共筑数据要素市场新篇章

近期&#xff0c;整数智能荣获上海数据交易所“数据治理服务商”证书&#xff0c;正式加入上海数据交易所数商生态&#xff0c;成为上海数据交易所官方认证的数据治理服务商。 在数字经济的浪潮中&#xff0c;上海数据交易所一直扮演着引领者和推动者的角色。紧扣建设国家级…...

计算机网络-自顶向下方法复习纲要

计算机网络-自顶向下方法复习纲要 第一章&#xff1a;计算机网络和因特网 协议&#xff1a;p6网络边缘&#xff1a;p6网络核心&#xff1a;p15存储转发传输机制&#xff1a;p16电路转发中的复用&#xff1a;p19-p20分组交换和电路交换的区别/对比&#xff1a;p18/p20分组交换…...

1.3.1 离散周期信号DFS

目录 离散周期序列的DFS表示 离散周期信号DFS的性质 线性特性 位移特性 对称特性 奇偶对称 共轭反转对称 实序列的对称特性 周期卷积 DFS——Discrete Fourier Series 傅里叶级数 离散周期序列的DFS表示 做题得到的小公式 离散周期信号DFS的性质 线性特性 位…...

springboot集成官方fastdfs以及fastdfs开启防盗链踩坑

目录 一、fastdfs原理 二、在springboot中使用fastdfs 三、fastdfs开启防盗链功能 四、fastdfs开启token验证踩坑 一、fastdfs原理 FastDFS是一个开源的轻量级分布式文件系统,它通过两个主要角色——跟踪器(Tracker)和存储节点(Storage)——来管理文件。 Tracker 主要…...

linux shell判断4g网络和有线网络状态

要在Linux中判断ppp0的4G网络和有线网络,并确保4G网络优先,可以使用以下方法: 首先,检查网络接口是否启用。可以使用ip link show命令查看网络接口的状态。 然后,使用ping命令测试网络连接。例如,可以分别ping一个有线网络和4G网络的网关,以确定哪个网络可用。 最后,根…...

[游戏开发][UE5]引擎使用学习记录

C Log和蓝图Log C Log 方法 UE_Log(参数1&#xff0c;参数2&#xff0c;参数3) //举例: UE_LOG(LogTemp, Error, TEXT("Log Info: %s"),"Test Log"); 三个参数的作用 参数1&#xff1a;输出窗口归类使用&#xff0c;你写什么它就显示什么 参数2&#x…...

微信小程序怎么使用JSON动画?

微信小程序怎么使用JSON动画&#xff1f; 前言&#xff1a; 在微信小程序中实现动画有很多种方式&#xff0c;今天主要讲JSON动画 css3动画jsAPI动画使用PAG素材做动画使用GIF播放动画使用JSON文件做动画 准备工作 JSON动画素材下载lottie-miniprogram插件创建微信小程序的…...

IOS Swift 从入门到精通:数组,集合,元组,对比,字典,枚举

目录 数组 集合 元组 Arrays vs sets vs tuples 字典 字典默认值 创建空集合 枚举 枚举关联值 枚举原始值 复杂类型:总结 数组 数组是存储为单个值的值的集合。例如,John、Paul、George 和 Ringo 是姓名,但数组可让您将它们分组为单个值,即 The Beatles。 在代…...

TextRank 算法

第1关&#xff1a;Jieba 在关键词提取中的应用 任务描述 本关任务&#xff1a;根据本关所学有关使用 Jieba 库进行关键词提取的知识&#xff0c;编写使用 Jieba 模块进行关键词提取的程序&#xff0c;并通过所有测试用例。 相关知识 为了完成本关任务&#xff0c;你需要掌握…...

压缩wsl的磁盘占用空间

本文说的是wsl 2。 1. 关闭wsl&#xff0c;在cmd窗口中输入如下命令&#xff1a; wsl --shutdown 2. 接着输入&#xff1a;diskpart 这个命令会弹出新的窗口 3. 在新的窗口中输入&#xff1a; select vdisk file"d:\vos\unbutu\ext4.vhdx" 其中的 d:\vos\unbut…...

打破生态「孤岛」,Catizen将开启Telegram小游戏2.0时代?

Catizen&#xff1a;引领Telegram x TON生态的顶级猫咪链游 在区块链游戏领域&#xff0c;吸引玩家的首要因素往往是游戏的趣味性。然而&#xff0c;仅靠趣味性无法评估一个项目的长期价值和发展潜力。真正能在区块链游戏市场中取得长久成功的项目&#xff0c;无一例外都依靠扎…...

C++基础语法:类构造函数

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 类是实现面向对象思想的主要方法.前面提到:类是函数的变种,类可以通过调用静态方法或者成员函数来实现逻辑.多数情况下使用成员函数.构造函数是生成类对象成员的必须条件,对此做一些构造函数的归纳 构造函数的目…...

Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单

文章目录 一、SSO介绍1、使用SSO的好处 二、中间件介绍1、Express安装导入使用 2、cors安装导入配置 3、express-session安装导入配置使用 4、jsonwebtoken安装导入使用 5、jwt和session对比 三、SSO实现方案1、安装依赖2、结构3、实现原理 三、示例代码1、nodejs端 server/ind…...

提高Java应用稳定性的部署实践

提高Java应用稳定性的部署实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在实际的Java开发过程中&#xff0c;应用的稳定性是一个至关重要的问题。无论是…...

简过网:考公务员报班和不报班的区别大吗?

备考公务员&#xff0c;究竟是报班还是不报班呢&#xff1f;一篇文章让你看看两者之间的区别&#xff01; 报不报班&#xff0c;其实这是很多考生都会纠结的地方&#xff0c;其实小编还是建议报个班的&#xff0c;这不仅仅是因为我是做这个行业的&#xff0c;更是因为这么长时…...

文化财经盘立方通达信期货通支撑压力自动画线多空转折指标公式源码

文化财经盘立方通达信期货通支撑压力自动画线多空转折指标公式源码&#xff1a; N:26; M:2; D:5; TR1:MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)); ATR:MA(TR1,N); MEDIANN:(HIGH LOW)/2; UP:MEDIANNATR*M; DN:MEDIANN-ATR*M; A:BARSLAST(C…...

重生之我要学后端11--数据库基础概念(持续更新)

数据库 前言一、关系型数据库二、非关系型数据库三、应用场景关系型数据库&#xff08;RDBMS&#xff09;非关系型数据库&#xff08;NoSQL&#xff09;综合因素 前言 后端开发者应该熟悉数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;包括关系型数据库&#xff08;…...

配置 Cmder 到鼠标右键

win Q 快捷键搜索 cmd&#xff0c;以管理员身份运行 在命令行输入 cmder.exe /REGISTER ALL...

kali下安装使用蚁剑(AntSword)

目录 0x00 介绍0x01 安装0x02 使用1. 设置代理2. 请求头配置3. 编码器 0x00 介绍 蚁剑&#xff08;AntSword&#xff09;是一个webshell管理工具。 官方文档&#xff1a;https://www.yuque.com/antswordproject/antsword 0x01 安装 在kali中安装蚁剑&#xff0c;分为两部分&am…...

GIT-LFS使用

0.前言 目前git仓库有很多很大的文件需要管理&#xff0c;但是直接上传&#xff0c;每次clone的文件太大&#xff0c;所有准备使用git-lfs解决。 1、下载和安装 Git LFS 1.1、直接下载二进制包&#xff1a; Releases git-lfs/git-lfs GitHub 安装 Git LFS sudo rpm -ivh…...

免费分享一套SpringBoot+Vue在线水果(销售)商城管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue在线水果(销售)商城管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue在线水果(销售)商城管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue在线水果(销售)商…...

推荐两款电脑文件处理工具,强大到你不舍得卸载

EasyFileCount EasyFileCount是一款基于Java开发的多功能文件管理工具&#xff0c;旨在帮助用户更轻松地管理和优化他们的文件存储。以下是EasyFileCount的主要功能和特点&#xff1a; 查看文件夹大小&#xff1a;用户可以快速统计和查看文件夹的总大小&#xff0c;实时显示各…...

Python 高级实战:基于自然语言处理的情感分析系统

前言 在大数据和人工智能迅猛发展的今天&#xff0c;自然语言处理&#xff08;NLP&#xff09;作为人工智能的重要分支&#xff0c;已经深入到我们的日常生活和工作中。情感分析作为NLP中的一个重要应用&#xff0c;广泛应用于市场分析、舆情监控和客户反馈等领域。本文将讲述…...

ruby面试题

ruby 基础 1、each、map、collect的区别 each: 仅遍历数组&#xff0c;并做相应操作&#xff0c;数组本身不发生改变。 map:遍历数组&#xff0c;并做相应操作后&#xff0c;返回新数组(处理)&#xff0c;原数组不变。 collect: 跟map作用一样。 collect! map!: 多了一个作…...

Android U Settings 应用中 APN 菜单实现的代码逻辑

功能简介 MobileNetwork移动网络设置页面下有【接入点设置】(APN)。 问题:为什么Controller初始化找不到pref,然后报错。 Note:什么时候切换成Controller的呢?在Android T&U 上还没有更新成kt实现 ,但是已经有Controller的方案。 流程逻辑 1、界面“telephony_a…...