JDK新特性(8-21)数据类型-直接内存
目录
Jdk 新特性
JDK 8 特性
默认方法实现作用:可以使接口更加灵活,不破坏现有实现的情况下添加新的方法。
函数式接口
StreamAPI
JDK 9 特性
JDK 10 特性
JDK 11 特性
JDK 14 特性
JDK 17 特性
JDK 21 特性
数据类型
基本数据类型和引用数据类型的区别
自动装箱自动拆箱
integer和int的区别
缓存池实现
直接内存
Jdk 新特性
JDK 8 特性
1、Lambda 表达式:这是 JDK 8 最重要的特性之一。它允许将函数作为方法参数传递,
使得代码更加简洁。对于接口可以直接用()->{}方式来表达
小括号表示方法入参,花括号内表示方法返回值,如Collections的sort()方法:
Optional判空。
例如,可以使用 Lambda 表达式来简化集合的遍历和操作。
如List<String> list = Arrays.asList("a", "b", "c");
list.forEach((s) -> System.out.println(s));。
2、Stream API:提供了一种对集合进行操作的新方式。它支持链式操作,
用于对数据进行过滤、映射、排序等操作。
例如,List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers =
numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
,可以方便地从一个集合中筛选出偶数。
3、接口默认方法和静态方法:接口可以有默认方法和静态方法。
默认方法允许在接口中提供默认的实现,
这样实现接口的类在没有重写该方法时可以使用默认实现。
例如,interface MyInterface {
default void myMethod() { System.out.println("Default method"); }
}。
4、新的日期和时间API
5、并发增强
6、支持多重注解
7、反射的加强 。JDK8加强了反射,它允许你直接通过反射获取参数的名字
9、JavaScript引擎Nashorn
10、Java虚拟机(JVM)的新特性
PermGen移出永久代,变成是Metaspace元空间。
JVM选项-XX:PermSize与-XX:MaxPermSize分别被-XX:MetaSpaceSize与-XX:MaxMetaspaceSize所代替。
原文链接:JDK 7 和 JDK8 的区别_jdk8个jdk7区别-CSDN博客
默认方法实现作用:可以使接口更加灵活,不破坏现有实现的情况下添加新的方法。
功能性接口:Function 接收一个功能参数t,并返回一个功能结果R。
断言性接口:Predicate 主要用到test方法 其中参数t为输入参数,
如果输入参数符合断言则返回true,否则false 。/ˈpredɪkət /
供给性接口:Supplier 不接收任何参数 但有返回值。/səˈplaɪə(r)/
java.util.function.Supplier <T>接口仅包含一个无参的方法:T get(),
用来获取一个泛型参数指定类型的对象数据
消费性接口:Consumer 只接收一个参数t,但是没有返回值。
函数式接口
有且仅有一个抽象方法的接口(不包括默认方法、静态方法以及对Object方法的重写)
(注:一般会出现一个名词叫做“语法糖”,即使用更加方便而原理不变的代码语法,
如Lambda可以认为是匿名内部类的语法糖)
@FunctionalInterface
// 定义一个接口,只包含一个抽象方法
public interface MyfuInter {
public abstract void method();
}
StreamAPI
filter(T -> boolean) 保留 boolean 为 true 的元素
map(T -> R) 将流中的每一个元素 T 映射为 R(类似类型转换)
List<String> newlist = list.stream().map(Person::getName).collect(toList());
flatMap(T -> Stream)
将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流
//去重复
Stream<T> distinct();
//排序
Stream<T> sorted();
//根据属性排序
Stream<T> sorted(Comparator<? super T> comparator);
//对对象的进行操作
Stream<T> peek(Consumer<? super T> action);
//截断--取先maxSize个对象
Stream<T> limit(long maxSize);
//截断--忽略前N个对象
Stream<T> (long n);
anyMatch表示,判断的条件里,任意一个元素成功,返回true
allMatch表示,判断条件里的元素,所有的都是,返回true
noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true
joining 连接字符串 .collect(joining(",")); 返回String
groupingBy 用于将数据分组,最终返回一个 Map 类型
统计(count、averaging)
min,max,findFirst,findAny
平均值:averagingInt、averagingLong、averagingDouble
最值:maxBy、minBy
求和:summingInt、summingLong、summingDouble
统计以上所有:summarizingInt、summarizingLong、summarizingDouble
List<User> userList = Lists.newArrayList();
userList.add(new User(1L, "彼得", 18));
userList.stream() .filter(user -> user.getAge() >18) .map(User::getName).forEach(System.out::println);
userRespDtoList.stream().filter(x -> !ObjectUtils.isEmpty(x.getDeptId())).forEach(user -> {})
Map、collect、group by、distinct、sum
list.stream()
.filter(s -> s.startsWith("张"))
.filter(s -> s.length() == 3)
.forEach(System.out::println);
List<String> idcards= users.stream().map(User::getIdcard).collect(Collectors.toList())
原文链接:list对象转map stream /去重( 根据属性转Map或者分组)_list转map去重-CSDN博客
JDK 9 特性
模块系统(Java Platform Module System - JPMS):这是 JDK 9 的核心变化。它将 Java 代 码组织成模块,每个模块有自己的名称、依赖关系和封装边界。
例如,可以创建一个名为com.example.mymodule的模块,
并且在模块描述文件module - info.java中定义模块的依赖和导出的包,如module com.example.mymodule
{ exports com.example.api; requires java.base; }。
改进的 JShell 工具:JShell 是一个交互式的 Java 编程环境。
在 JDK 9 中它得到了改进,允许开发者快速地测试 Java 代码片段,而不 需要编写完整的类和方法。
例如,可以直接在 JShell 中输入int a = 5; System.out.println(a);
并立即看到输出结果。
JDK 10 特性
局部变量类型推断(var 关键字):可以在声明局部变量时使用var关键字来让编译器自动 推断变量的类型。
例如,var list = new ArrayList<String>();,
编译器会根据赋值的右侧自动推断list是ArrayList<String>类型。
这使得代码编写更加简洁,尤其是在处理复杂的泛型类型时。
JDK 11 特性
新的 HTTP 客户端 API:提供了一个标准的、现代化的 HTTP 客户端,
用于替代旧的HttpURLConnection。
它支持同步和异步请求,并且可以方便地处理请求和响应。
例如,HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://example.com")).build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());。
字符串处理方法改进:新增了一些字符串处理方法,
如isBlank()用于判断字符串是否为空或仅包含空白字符,
lines()用于按行拆分字符串等。这些方法使得字符串的处理更加方便。
JDK 14 特性
Records(记录):Records 是一种新的类类型,用于创建不可变的数据类。
它自动生成了构造函数、访问器方法和equals()、hashCode()等方法。
例如,record Point(int x, int y) {}定义了一个记录类,它有x和y两个属性,可以通过new Point(1, 2)来创建实例,并且可以直接访问x和y属性。
Pattern Matching for instanceof(针对 instanceof 的模式匹配):这是对instanceof操作的 改进。以前在使用instanceof检查类型后还需要进行类 型转换,现在可以在instanceof表达式中直接声明变量并使 用。例如,if (obj instanceof String str)
{ System.out.println(str.length()); }。
JDK 17 特性
- 语言特性增强
- 密封类(Sealed Classes)改进:密封类可以精确控制哪些类可以继承它。例如,定义一个密封类sealed class Shape permits Circle, Square,这就限制了只有Circle和Square类能够继承Shape类,使得类的继承层次更加可控,有助于在设计模式(如状态模式、策略模式)中限制子类的范围,增强代码的安全性和可维护性。 /siːld/
- 模式匹配(Pattern Matching)增强:在处理instanceof操作时有了很大的改进。以前使用instanceof需要先进行类型判断,再进行类型转换,如if (obj instanceof String) { String str = (String) obj; System.out.println(str.length()); }。在 Java GDK 17 中,可以直接写if (obj instanceof String str) { System.out.println(str.length()); },这种方式更加简洁高效,提高了代码的可读性。
- 性能优化
- JIT(即时编译)编译器优化:通过对 JIT 编译器的改进,加快了代码的执行速度。编译器能够更智能地对热点代码进行优化编译,减少了字节码解释执行的时间,提高了 Java 应用程序的整体性能。
- 内存管理优化:在内存布局和分配方面进行了优化。例如,对于对象的内存分配机制进行了调整,减少了内存碎片的产生,提高了内存的利用率。这对于内存密集型的应用程序(如大数据处理、内存数据库等)非常有利,可以降低内存占用,提升系统的稳定性。
- 新的 API 提供
- 日期和时间 API 增强:新增了一些用于处理日期和时间的方法,使得日期时间的计算和格式化更加精准。比如在处理跨时区的日期时间问题时,提供了更方便的函数来进行时区转换和计算,方便开发全球化应用程序。
- 安全相关 API 更新:在安全方面提供了新的 API,可能包括增强的加密算法相关函数。例如,在网络通信加密、数据存储加密等场景下,可以利用这些新的 API 来提高应用程序的安全性,保护用户数据。
- 容器化和云原生支持提升
- 更好地适应容器编排平台:能够更好地与 Kubernetes 等容器编排平台配合。在资源动态分配的场景下,Java 应用可以更快地响应资源的变化。例如,当容器的 CPU 或内存资源被重新分配时,Java 应用能够及时调整自身的性能和资源消耗策略,保证应用的稳定运行。
- 云原生服务集成增强:在云原生的分布式应用开发方面,提供了更好的接口用于与其他服务集成。比如,在微服务架构中,可以更方便地与服务发现、配置管理等服务进行交互,促进云原生应用的开发和部署。
JDK 21 特性
虚拟线程(Virtual Threads):这是一种轻量级的线程,可以有效减少编写高吞吐量并发应 用程序的难度。虚拟线程能够在不增加系统资源消耗的前提下,
大大提高应用程序的并发处理能力。
分代 ZGC(Z Garbage Collector):进一步优化了垃圾回收的性能,
特别是在处理大型堆内存场景下的性能表现更好,
能够减少垃圾回收的暂停时间,提高系统的稳定性。
记录模式(Record Patterns)和模式匹配(Pattern Matching)增强:在语言语法方面有新的 预览功能出现,让代码在处理复杂数据结构和类型判断时更加简 洁高效。
例如,在处理复杂的嵌套数据结构时,可以更方便地提取和使用其中的数据。
2023年9月19日,Oracle公司正式发布了JDK 21
数据类型
Java中的数据类型分为两大类,基本数据类型和引用数据类型
基本数据类型只有8种,可按照如下分类四类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean
引用类型
大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型,
还有Double,Byte,Long,Float,Char,Boolean,Short(注意这里和基本类型相比首字母是大写)
简单来说,所有的非基本数据类型都是引用数据类型
基本数据类型和引用数据类型的区别
存储位置
在方法中声明的变量:局部变量只能在方法中有效,
每当程序调用方法时,系统都会为该方法建立一个方法栈,结束系统会释放方法栈。
在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。
当声明是基本类型的变量的时,其变量名及值是放在JAVA虚拟机栈中
当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在JAVA虚拟机的栈中,该变量所指向的对象是放在堆类存中的。
在类中声明的变量
在类中声明的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个方法执行结束而销毁)。
在类中声明的变量即可是基本类型的变量 也可是引用类型的变量
当声明的是基本类型的变量其变量名及其值放在堆内存中的
引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中。
传递方式
基本变量类型:在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的
引用变量类型:引用数据类型变量,调用方法时作为参数是按引用传递的。
一切的引用数据类型都可以使用object进行接收
自动装箱自动拆箱
将基本数据类型转化为引用数据类型的过程叫做装箱,
把从引用数据类型转化为基本数据类型的过程叫做拆箱
Integer类型的对象,使用intValue()可以将Integer对象拆箱为int类型变量
valueOf()--装箱
java自己的一种机制,叫做自动装箱和自动拆箱
必须看:一篇文章带你搞定 Java 基本数据类型和引用数据类型的区别_java基本数据类型和引用数据类型的区别-CSDN博客
integer和int的区别
1.数据类型和内存存储方式不同:
int是Java的基本数据类型,直接存储数值;
而Integer是int的包装类,是一个对象,存储在堆内存中。
2.默认值不同。
int的默认值为0;而Integer的默认值为null。
变量比较方式不同。当比较两个变量是否相等时,
可以直接使用==操作符比较两个int变量;
而Integer变量则需要使用equals方法进行比较。
3.实例化需求不同。
int变量不需要实例化即可使用;而Integer变量必须实例化后才能使用。
4.方法和功能不同。
Integer提供了一些额外的操作方法,例如将字符串转换成整数,
以及表示整数的最大值和最小值的常量;而int主要用作数值运算。
Integer最小值-2^31 , 最大值2^31-1
1byte = 1字节 = 8 bit(位)
String 4个字节 默认会被压缩,不压缩8个
缓存池实现
private static class IntegerCache {
static final int low = -128;
assert IntegerCache.high >= 127;
}
assert [boolean 表达式] assert 断言 [əˈsɜːt]
Java 是从 JDK1.4 开始支持断言的,主要用于程序代码的调试或测试阶段,千万不能用在正式环境上。
常量池:可以看作一张表,虚拟机指令根据这张表找到要执行的类名、方法名、参数类型、字面量等信息。
运行时常量池:当类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址。
- Byte Short Integer Long 四种类型字面量在-128<= x <=127 时对象将进入常量池。
- Character 类型 不能为负数,字面量大于等于0 且 ,小于等于127时对象将进入常量池。
- Boolean类型 两个字面量都会进入常量池
- Float 和Double 类型 不会进入常量池
彻底弄懂java中的常量池-腾讯云开发者社区-腾讯云
直接内存
并不属于jvm中内存结构,不由jvm进行管理。是虚拟机的系统内存
常见NIO操作时,用于数据缓冲区,分配回收成本较高,但读写性能高,不收jvm内存回收管理。
相关文章:

JDK新特性(8-21)数据类型-直接内存
目录 Jdk 新特性 JDK 8 特性 默认方法实现作用:可以使接口更加灵活,不破坏现有实现的情况下添加新的方法。 函数式接口 StreamAPI JDK 9 特性 JDK 10 特性 JDK 11 特性 JDK 14 特性 JDK 17 特性 JDK 21 特性 数据类型 基本数据类型和引用数据类型的区别…...

003-Kotlin界面开发之声明式编程范式
概念本源 在界面程序开发中,有两个非常典型的编程范式:命令式编程和声明式编程。命令式编程是指通过编写一系列命令来描述程序的运行逻辑,而声明式编程则是通过编写一系列声明来描述程序的状态。在命令式编程中,程序员需要关心程…...

QT pro项目工程的条件编译
QT pro项目工程的条件编译 前言 项目场景:项目中用到同一型号两个相机,同时导入两个版本有冲突,编译不通过, 故从编译就区分相机导入调用,使用宏区分 一、定义宏 在pro文件中定义宏: DEFINES USE_Cam…...

深度学习之经典网络-AlexNet详解
AlexNet 是一种经典的卷积神经网络(CNN)架构,在 2012 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中表现优异,将 CNN 引入深度学习的新时代。AlexNet 的设计在多方面改进了卷积神经网络的架构,…...

部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio
1. 模块简介 Prometheus 是一个开源的监控系统和时间序列数据库。Istio 使用 Prometheus 来记录指标,跟踪 Istio 和网格中的应用程序的健康状况。Grafana 是一个用于分析和监控的开放平台。Grafana 可以连接到各种数据源,并使用图形、表格、热图等将数据…...

结合 Spring Boot Native 和 Spring Boot 构建高性能服务器架构
随着云计算和微服务架构的普及,开发者们不断寻求提高应用性能和用户体验的解决方案。Spring Boot Native 的出现,利用 GraalVM 的原生映像特性,使得 Java 应用的启动速度和资源占用得到了显著改善。本文将深入探讨如何将前端应用使用 Spring …...

ArcGIS影像调色(三原色)三原色调整
本期主要介绍ArcGIS影像调色(三原色) ArcGIS影像调色(三原色),对比度、亮度、gamma。红绿蓝三原色调整。 视频学习 ArcGIS影像调色(三原色)...

SQLite从入门到精通面试题及参考答案
目录 SQLite 是什么? SQLite 的优点有哪些? 轻量级与易于部署 零配置和低维护成本 良好的兼容性和跨平台性 高性能和可靠性 SQLite 的局限性有哪些? 并发处理能力有限 缺乏用户管理和权限控制功能 有限的扩展性 有限的网络支持 SQLite 和其他数据库系统(如 MyS…...

【C/C++】字符/字符串函数(0)(补充)——由ctype.h提供
零.导言 除了字符分类函数,字符转换函数也是一类字符/字符串函数。 C语言提供了两种字符转换函数,分别是 toupper , tolower。 一.什么是字符转换函数? 顾名思义,即转换字符的函数,如大写字母转小写字母&am…...

Git 的特殊配置文件
文章目录 1.前言2.Git 标准配置文件.gitignore作用格式示例 .gitattributes作用格式示例 .gitmodules作用格式示例 .gitconfig作用格式示例 3.非 Git 标准约定文件.gitkeep简介示例 .gitacls作用格式示例 参考文献 1.前言 Git 是一个强大的版本控制系统,它使用多个…...

数据的表现形式(1)
数据的表现形式 西文字符编码 ASCII码(美国信息交换标准码) 计算机内部用一个字节(8位二进制),来存放一个7位ASCII码,最高位为“0”,共 可以表示128个不同字符 ASCII码中,0是48&…...

《高频电子线路》—— 调幅
文章内容来源于【中国大学MOOC 华中科技大学通信(高频)电子线路精品公开课】,此篇文章仅作为笔记分享。 调幅 普通调幅 AM 普通调幅,也属于线性调制,需要了解其时域和频域。 时域(表达式) vΩ…...

ubuntu22.04安装ROS2Humble
参考链接 Ubuntu22.04——ROS2安装以及小海龟画圆 Ubuntu 22.04 安装 ros noetic Slam_in_autonomous_driving(一) 环境配置...

软中端,硬中断(学习笔记)
/proc/softirqs 提供了软中断的运行情况; /proc/interrupts 提供了硬中断的运行情况。 以下图片展示的是软中断内容: 在查看 /proc/softirqs 文件内容时,你要特别注意以下这两点。 第一,要注意软中断的类型,也就是这…...

scIDST:弱监督学习推断单细胞转录组数据中的疾病进展阶段
背景:患者来源组织中的单个细胞,每个都处于不同的病理阶段,因此这种细胞变异性阻碍了随后的差异基因表达分析。 结果:为了克服这种异质性问题,作者提出了一种新的深度学习方法,scIDST,该方法可以…...

Linux 下执行定时任务之 Systemd Timers
不知道 ECS 因为什么缘故,上面安装的 MySQL 服务老是不定期挂掉,本来想通过 Linux 得 Cron 配置个半小时的定时检测任务,结果一直没有执行,因此又尝试使用了 Systemd Timers 进行了重新配置,简要做个记录。 Systemd Ti…...

flutter 专题二 Flutter状态管理之Riverpod 0.8.4
一 、flutter 有哪些状态管理方式 Flutter的状态管理方式有很多,Redux、 Bloc、 MobX、Provider等等。单单一个Provider,我也见到了各种组合,例如ChangeNotifier Provider / StateNotifier Provider( freezed)。各…...

【Linux】从零开始使用多路转接IO --- poll
碌碌无为,则余生太长; 欲有所为,则人生苦短。 --- 中岛敦 《山月记》--- 从零开始使用多路转接IO 1 前言1 poll接口介绍3 代码编写4 总结 1 前言 上一篇文章我们学习了多路转接中的Select,其操作很简单,但有一些缺…...

Docker配置宿主机目录和网络映射
容器挂载宿主机目录 在Docker中,你可以通过-v或--volume选项将宿主机的目录挂载到容器中。这可以让你在容器和宿主机之间共享文件。 例如,如果你想将宿主机的/home/user/data目录挂载到容器的/data目录,你可以使用以下命令: do…...

第十七课 component组件解析
component组件解析 component组件的写法在众多组件写法中算是比较简单的,component组件结构组成如下: 1)组件名 2)组件模板 3)利用Vue对象进行生成 基础示例: <div id"app"><test>…...

求余和求模是不是一样的,就要看看计算机中的 fix 和 floor 区别
在计算机中,fix和floor是两个不同的取整函数,它们各自有不同的取整规则。以下是fix和floor的详细区别: 一、定义与功能 fix函数 定义:fix函数是朝零方向取整的函数,即它会返回小于或等于(对于正数…...

00 递推和递归的核心讲解
递归的步骤 说 f(n)含义返回/xx f(n)等价式子在第二步中观察趋势,发现边界值(分类递归)和终止值(return) 递归优化思路 记忆化 递推/动态规划的步骤 说f(n)含义循环 关系式列 初值 综上,题目分为两类&a…...

深度学习常用开源数据集介绍【持续更新】
DIV2K 介绍:DIV2K是一个专为 图像超分辨率(SR) 任务设计的高质量数据集,广泛应用于计算机视觉领域的研究和开发。它包含800张高分辨率(HR)训练图像和100张高分辨率验证图像,每张图像都具有极高…...

rust编写的系统监测器
系统监测器 技术栈 rusttaurivue3vue-echartsrsbuild 软件介绍 用于查看电脑的硬件信息,实时监测cpu,内存,硬盘,网络,进程等系统资源 图形化,动态化展示,美观实用 软件截图 下载 https:/…...

【MyBatis源码】CacheKey缓存键的原理分析
文章目录 Mybatis缓存设计缓存KEY的设计CacheKey类主体CacheKey组成CacheKey如何保证缓存key的唯一性 Mybatis缓存设计 MyBatis 每秒过滤众多数据库查询操作,这对 MyBatis 缓存键的设计提出了很高的要求。MyBatis缓存键要满足以下几点。 无碰撞:必须保证…...

034_Structural_Transient_In_Matlab结构动力学问题求解
结构动态问题 问题描述 我们试着给前面已经做过的问题上加一点有趣的东西。 结构静力学求解 当时求解这个问题,在最外面的竖直切面加载了一个静态的固定的力。下面我们试试看在上方的表面增加一个脉冲压力载荷。 采用统一的有限元框架,定义问题&…...

项目模块十五:HttpResponse模块
一、模块设计思路 存储HTTP应答要素,提供简单接口 二、成员变量 int _status; // 应答状态码 unordered_map<string, string> _headers; // 报头字段 string _body; // 应答正文 bool _redirect_flag; // 是否重定向信息 stri…...

推荐一款优秀的pdf编辑器:Ashampoo PDF Pro
Ashampoo PDF Pro是管理和编辑 PDF 文档的完整解决方案。程序拥有您创建、转换、编辑和保护文档所需的一切功能。根据需要可以创建特定大小的文档,跨设备可读,还可以保护文件。现在您还能像编辑Word文档一样编辑PDF! 软件特点 轻松处理文字 如 Microso…...

【系统架构设计师】2024年上半年真题论文: 论模型驱动架构设计方法及其应用(包括解题思路和素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2024年上半年 试题3)解题思路1、模型驱动架构能够为软件开发带来的好处2、模型驱动架构的开发过程论文素材参考真题题目(2024年上半年 试题3) 模型驱动架构设计是一种用于应用系统开发的软件设计方法…...

国内短剧源码短剧系统搭建小程序部署H5、APP打造短剧平台
在当今的互联网时代,短剧作为一种新兴的娱乐形式,受到了越来越多用户的喜爱。为了提供更好的用户体验和满足用户需求,一个好的短剧系统需要具备多元化的功能和优质的界面设计。 本文将介绍国内短剧源码短剧系统搭建小程序部署H5、APP所需的…...