【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)
🍞自我激励:每天努力一点点,技术变化看得见
文章目录
- Java语言概述
- Java是什么
- Java语言的重要性
- Java语言发展简史
- Java语言特性
- 第一个Java程序
- main方法示例
- 运行Java程序
- JDK、JRE、JVM之间的关系
- 注释
- 基本规则
- 注释规范
- 标识符
- 关键字
Java语言概述
Java是什么
Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。
Java语言的重要性
- 语言广泛使用程度
下图数据来自于TIOBE编程语言社区2025年4月最新的排行榜,Java常年占据语言排行榜前五,是近些年最火的编程语言之一。当然,每个语言有其在特定领域的优势,该榜单无法说明哪个语言更好。
- 工作领域
Java语言目前在IT领域的应用是非常广泛的,掌握Java语言可以从事不少IT行业的相关开发岗位,具体包括:
- 企业级系统
比如大型负责的企业级软件系统,Java的安全机制以及跨平台性的优势,其在分布式系统领域开发中有广泛应用,涉及到金融、电信、交通、电子商务、ERP系统等。 - Web开发领域
Java语言在设计初期,赶上了互联网发展的封口,当时就瞄准了互联网开发,凭借稳定的性能表现和较好的扩展性,Java语言一直是大型互联网平台的重要解决方案。 - Android平台应用
Android是一种智能手机操作系统,Java是一门非常流行的编程语言。Android上应用程序就是大多是用Java编写的,Android的SDK大部分就是直接将Java SDK翻译过来的,所以具有Java基础,也可以快速上手Android开发。 - 大数据平台开发
大数据相关的各类框架,比如:Hadoop、Spark、Storm、Flink等,以及各种中间件flume、kafka、sqoop等,这些框架以及工具等大多数时用Java语言开发的,随着大数据技术的落地应用,Java在大数据领域的应用前景也是比较广阔的。
除了上述开发领域外,Java在游戏领域、人工智能领域、科学计算领域、嵌入式领域也有一定的应用。因此学好Java,将来就业的选择也会非常广泛。
Java语言发展简史
Java语言源于1991年4月,Sun公司James Gosling博士领导的绿色计划(Green Project)开始启动,此计划最初的目标是开发一种能够在各种消费电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个就是Java的前身:Oak(得名于Java创始人James Gosling办公室外的一颗橡树),但由于这些智能化家电的时长需求没有预期的高,Sun公司放弃了该项计划。
随着1995年代互联网的发展,Sun公司看到Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布,并提出“Write once, Run anywhere”的口号。
1996年1月,JDK 1.0版本发布,第一个正式版本的运行环境,JDK 1.0提供了一个纯解释知识的JVM。
1997年2月,JDK1.1发布,技术代表包括JAR文件格式、JDBC、JavaBeans、RMI等,语法也有一定增加,例如内部类、反射等。
1998年12月,JDK1.2发布,工程代号为“竞技场”,Java技术体系拆分为J2SE、J2EE、J2ME。代表技术包含:Swing,第一次内置了JIT、Java语言增加了Collections集合类等。
2000年5月,JDK1.3发布,主要在Java类库上改进,如数学计算和新的Timer API,对Java 2D做了很多改进,新增加JavaSound类库。
2002年2月,JDK1.4发布,Java真正走向成熟的版本,代表技术包括:正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。
2004年9月,JDK5发布,SUN公司放弃JDK1.x的命名,正式改为JDK x,在语法易用上改进很大,包括:自动装箱、泛型、动态注释、枚举、foreach等,修改了JMM,增加了并发包等。
2006年12月,JDK6发布,启用Java EE 6、Java SE 6、 Java ME 6的新命名,初步动态语言支持,提供编译期注解处理器和微型HTTP服务器API,对JVM内部做了大量改进。JDK6发布后,在JavaOnce大会上,SUN公司宣布Java开源。
2009年2月,JDK7完成了其第一个里程碑版本,JDK7最初规划了10个里程碑,由于种种原因,JDK7无法按照计划完成。
2011年7月,Oracle收购Sun公司后,为保证JDK7正式发布,大幅裁剪了JDK7的预定目标,比如:Lambda。JDK7的改进包含:G1收集器,加强对非Java语言的调用支持,可并行的类加载器等。
2014年8月,JDK8发布,提供了JDK7中规划但未能完成的功能,永久移除Java Spot永久代,是目前使用最广泛的版本。
2017年9月JDK9发布,2018年3月JDK10发布,2018年9月JDK11发布,为长期支持的一个版本。2019年3月JDK12发布…截止2025年5月,JDK最新发布版本为JDK24,JDK的版本在不断更新迭代,但JDK8依然是当前使用最为广泛的版本。当前系列文章,非特殊说明,均以JDK8为唯一介绍版本。若读者对Java的各个版本的变动(关于它的历史和技术更新)感兴趣,可前往Oracle公司提供的Java Language Updates页面查看,[点击传送门前往]。
ps:传闻James Gosling(詹姆斯·高斯林)喜欢喝Java岛上的咖啡,Java语言的命名由此而来。学Java之父喝爪哇岛咖啡,Java技术杠杠的!
Java语言特性
以下的Java语言特性来自Java白皮书:
-
简单性
Java语法是C++语法的“纯净版本”,相当于对C++做了一个减法。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等等。不仅如此,Java开发环境远远超出大多数其他编程语言的开发环境。 -
面相对象
什么是面相对象呢?
在Java的世界里,一些皆对象。比如:人、狗、手机、电脑等都是对象。所谓面相对象,就是依靠对象之间的交互来完成事情,比如:人用手机上网购物,狗吃骨头…
Java的面相对象特性与C++旗鼓相当,与C++的主要不同点在于多重继承。在Java中,取而代之的是更简单的接口概念。而且与C++相比,Java提供了更丰富的运行时自省功能。 -
分布式(微服务)
Java有丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。 -
健壮性
Java与C++最大的不用在于Java采用的指针模型可以消除重写内存和损坏数据的可能性(对于曾经花了几个小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性)。不仅如此,Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。 -
安全性
Java应用于网络/分布式环境。为了达到这个目标,在安全性方面投入了大量的精力。使用Java可以构建防病毒、防篡改的系统。
从一开始,Java就涉及成能够防范常见的各种攻击:
① 运行时堆栈溢出。蠕虫和病毒常用的攻击手段。
② 破坏自己进程空间之外的内存。
③ 未经授权读写文件 -
体系结构中立
编译器生成了一个体系结构中立的目标文件格式,按照该中规范生成的文件,只要有Java运行时系统,这些编译后的代码就可以在许多处理器上运行。Java编译器通过生成与特性计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易在任何机器上解释执行,而且还可以动态地翻译成本地机器代码。这就是为什么可以:“Write once,Run anywhere”。
而且其他语言编写的程序,在编译后如果能够严格按照字节码文件的规范生成.class文件,也可以在JVM上运行。
-
可移植性
与C/C++不同,Java规范中没有“依赖具体实现的地方”。基本数据类型的大小以及有关运算都做了明确的说明。例如,Java中的int永远是32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商制定的其他大小。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头疼的主要问题。 -
解释性
Java为了实现与平台无关,自己维护了一套栈架构的指令集,Java源代码经过编译之后,字节码文件中的指令就是按照自己的指令集来组织的,但是在具体硬件环境中运行时,系统并不能识别,因为Java程序在执行时,Java解释器会逐条地将字节码文件中的指令翻译成CPU的指令集。 -
高性能
边解释边执行、垃圾回收等会导致Java代码运行效率偏低,近年来JVM也在不断地优化。比如,JIT(即时编译器)、热点代码探测让Java程序的执行效率大幅提高,在有些场合不亚于C/C++。 -
多线程
Java在当时很超前,它是第一个支持并发程序设计的主流语言。多线程可以带来更好的交互相应和实时行为。并发程序设计绝非易事,但是Java在这方面表现出色,可以很好地管理这个工作。 -
动态性
Java与C/C++相比更佳具有动态性,它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而对客户端没有任何影响。在Java中找出运行时类型信息十分简单(反射特性,后续文章将会介绍)。
综上,Java不仅仅是一门编程语言,也是一个由一系列计算机软件和规范组成的技术体系。
第一个Java程序
main方法示例
这里先给出一个简单Java程序——“Hello World”,刚开始读者可能看得一头雾水。
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}
}
ps:可以说,Java的main方法是主流编程语言中最长的。
下面对上述程序进行解释,我们可以从上述代码中看到一个完整的Java程序的结构,Java程序由如下三个部分组成:
- 源文件(扩展名为*.java):源文件带有类的定义。类是用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包含在花括号里面。
- 类:类中带有一个或多个方法。方法必须在类的内部声明。
- 方法:在方法的花括号中编写方法应该执行的语句。
总结:类存在于源文件里面;方法存在于类中;语句存在于方法中。
注意:在一个源文件中只能有一个piblic修饰的类,而且源文件名字必须与public修饰的类名字相同!
运行Java程序
在程序编写好之后,如何让它运行起来呢?
Java是一门半编译型、半解释型语言,先通过javac编译程序将源文件编译成.class的字节码文件,生成的字节码文件是与平台无关的、面向JVM的文件。最后启动java虚拟机来运行。class文件,此时JVM会将字节码转换成平台能够理解的形式来运行。
因而,我们可以总结出运行Java程序的步骤:
- 使用记事本或者IDEA(集成开发环境)编写Java源程序
- 使用javac.exe编译器编译Java远程,生成xxx.class的字节码文件;cmd命令行执行javac filename.java
- 使用java运行xxx.class字节码文件;cmd命令行执行java filename
ps:实际开发中,我们会使用IDEA、eclipse等集成开发环境编写程序,它会自动帮我们执行上述步骤。
注意:在运行Java程序前,必须安装好JDK(Java Development Kit,即Java开发工具包),JDK里面就包含了javac和java工具,Java程序最终是在JVM(Java虚拟机)中运行的。
JDK、JRE、JVM之间的关系
- JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试同居jconsole、jstack等。
- JRE(Java Runtime Environment):Java运行时环境,包含了JVM、Java基础类库,是Java程序运行时所需的环境。
- JVM(Java Virtual Machine):Java虚拟机,用于运行Java代码。
因而,可以得到它们三者的关系:
JDK=JRE+开发工具集(比如javc)
JRE=JVM+JavaSE标准类库
它们的关系可以使用下图表示:
注释
注释是为了让代码更容易被读懂而附加的表述信息,不参与编译运行,但却非常重要。
ps:我们无法保证3个月仍能读懂这段程序,在编写程序时要有编写注释的习惯。
基本规则
Java中的注释主要分为以下三种:
- 单行注释:// 注释内容(使用得最多的方式)
// 这是一个单行注释,不会被编译和执行
public class HelloWorld {// 下面一行是一个方法public static void main(String[] args) {// 下面一行用于打印“Hello World”System.out.println("Hello World");}
}
- 多行注释:/* 注释内容 */ (不推荐使用)
/*
这是一个多行注释
所有内容都不会被编译执行
多行注释不能嵌套使用
*/
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");}
}
注意:不论是单行注释还是多行注释,都不参与编译,即编译之后生成的.class文件中不包含注释内容。
- 文档注释:/** 文档注释*/(常用于方法和类之上描述方法和类的作用)
文档注释可以被javadoc工具解析,生成一套以网页文件形式体现的程序说明文档。下面演示使用IDEA编写下方代码后,如何生成程序说明文档。
/**文档注释* @version v1.1.2* @author Jammingpro* 作用Jammingpro类,一个java程序*/
public class Jammingpro {/*多行注释:1. main方法是java程序的入口方法2. main函数的格式是固定的,必须为public static void main(String[] args)*//**main方法是程序的入口函数@param args 命令行参数*/public static void main(String[] args) {System.out.println("Jammingpro");}
}
在Jammingpro.java源代码所在目录中启动命令行,并执行javadoc -d doctest -author -version Jammingpro.java后,出现如下错误:
由于我的cmd窗口默认使用GBK编码并使用GBK解码,而IDEA则默认使用UTF-8进行编解码。这里需要制定编解码方式,即上述命令修改为:javadoc -d doctest -author -version -encoding UTF-8 -charset UTF-8 Jammingpro.java
解释:-d doctest表示在当前文件夹下,创建一个doctest文件夹;-author表示解析作者信息;-version表示解析版本信息;-encoding和-charset用于指定编解码信息。
在指定完命令后,当前文件夹下,将生成doctest文件夹。进入文件夹后,内容如下图所示。
双击index.html,即可查看程序说明文档。
注释规范
- 内容准确:注释内容要和代码一致、匹配,并在代码修改时及时更新;
- 篇幅合理:注释不应该太精简,也不应该长篇大论
- 使用中文:一般中国公司都要求使用中文写注释,外企另当别论。
标识符
在上述程序中,HelloWorld成为类名,main成为方法名,也可以将它们成为标识符,即:在程序中由用户给类名、方法名或者变量所取的名字
【硬性要求】
- 标识符中可以包含:字母、数字、下划线或$符号。
- 标识符不能以数字开头,可不能是关键字,且严格区分大小写
【软性建议】
- 类名:每个单词的首字母大写(大驼峰)
- 方法名:首字母小写,后面每个单词的首字母大写(小驼峰)
- 变量名:与方法名规则相同
ps:一个大型的工程是由多名工程师协同开发的,如果每个人都按照自己的方式随意取名,比如:person、PERSON、Person、_person,将会使得程序非常混乱。因而应遵照企业内部的软性要求,使得代码仿佛是一个人写的。
关键字
在使用IDEA、eclipse等集成开发环境开发时,通过观察上述程序可以发现,public、class以及static等颜色会发生变化,将这些具有特殊含义的标识符成为关键字。关键字是由Java语言提前定义好的,有特殊含义的标识符,或称为保留字。
注意:不能使用关键字定义标识符!
在Java中关键字很多,下图列举了一部分,后续文章将注意介绍。
nice,bro!我写完了这篇文章了,你也看完这篇文章了!一起奖励自己一道力扣题吧~
相关文章:

【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)
🍞自我激励:每天努力一点点,技术变化看得见 文章目录 Java语言概述Java是什么Java语言的重要性Java语言发展简史Java语言特性 第一个Java程序main方法示例运行Java程序JDK、JRE、JVM之间的关系注释基本规则注释规范 标识符关键字 Java语言概述…...
游戏打击感实现
视觉表现 1.帧冻结(卡肉) 原理:在攻击命中的瞬间暂停动画播放(通常0.1-0.3s),伯尼真实打击时的反作用力停滞感。实现:通过控制动画播放速度(如Unity的Animator.speed)结…...

项目三 - 任务2:创建笔记本电脑类(一爹多叔)
在本次实战中,我们通过Java的单根继承和多接口实现特性,设计了一个笔记本电脑类。首先创建了Computer抽象类,提供计算的抽象方法,模拟电脑的基本功能。接着定义了NetCard和USB两个接口,分别包含连接网络和USB设备的抽象…...

Electron学习+打包
1. 什么是 Electron? Electron 是⼀个 跨平台桌⾯应⽤ 开发框架,开发者可以使⽤:HTML、CSS、JavaScript 等 Web 技术来构建桌⾯应⽤程序,它的本质是结合了 Chromium 和 Node.js ,现在⼴泛⽤于桌⾯应 ⽤程序开发&a…...

NumPy线性代数功能全解析:矩阵运算与方程求解实用指南
NumPy 是线性代数领域中高效的工具。它可以帮助完成矩阵运算和方程求解。本文将介绍 NumPy 中用于线性代数的常用函数。 矩阵乘法 矩阵乘法会根据两个矩阵生成一个新矩阵。具体做法是将第一个矩阵的每一行与第二个矩阵的每一列相乘,并将乘积相加,得到新…...

《RabbitMQ 全面解析:从原理到实战的高性能消息队列指南》
一、RabbitMQ 核心原理与架构 1. 核心组件与工作流程 RabbitMQ 基于 AMQP 协议,核心组件包括 生产者(Producer)、交换机(Exchange)、队列(Queue) 和 消费者(Consumer)。…...
jenkins slave节点打包报错Failed to create a temp file on
jenkins slave节点打包报错 一、报错信息 FATAL: Unable to produce a script file Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to slave-83at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784)at hudson.remoting.UserRequest$…...
计算机视觉——通过 OWL-ViT 实现开放词汇对象检测
介绍 传统的对象检测模型大多是封闭词汇类型,只能识别有限的固定类别。增加新的类别需要大量的注释数据。然而,现实世界中的物体类别几乎无穷无尽,这就需要能够检测未知类别的开放式词汇类型。对比学习(Contrastive Learning)使用成对的图像和语言数据,在这一挑战中备受…...

Android Framework学习二:Activity创建及View绘制流程
文章目录 Window绘制流程Window Manager Service(WMS)SurfaceSurfaceFlinger 安卓View层次结构ActivityPhoneWindowActivity与PhoneWindow两者之间的关系ViewRootImplDecorViewDecorView 的作用DecorView 的结构总结 Activity创建流程View invalidate调用…...

python如何在深度学习框架目标检测算法使用Yolov8训练道路汽车漆面车漆缺陷数据集 建立基于YOLOv8道路汽车漆面缺陷(划痕)检测系统
基于YOLOv8道路汽车漆面缺陷(划痕)检测系统 文章目录 1. 安装依赖2. 数据集准备与划分3. 数据预处理4. 配置YOLOv85. 训练和评估模型6. 推理与可视化7. 构建GUI应用程序 道路汽车漆面车漆缺陷检测数据集1221张 1类 汽车漆面缺陷检测YOLO数据集 1221张…...

高性能、云原生的对象存储服务MinIO 详细介绍与案例应用
什么是MinIO? MinIO是一个高性能、云原生的对象存储服务,采用Apache License v2.0开源协议发布。它与Amazon S3云存储服务API兼容,适合构建高性能、可扩展的存储基础设施。支持大规模非结构化数据的存储,适合图片、视频、日志、备…...
Tailwind CSS 响应式设计解析(含示例)
本文内容: Tailwindcss V4 中如何使用响应式设计功能,包括默认断点、自定义断点、断点范围控制以及容器查询的各种技巧,帮助你在不离开 HTML 的前提下优雅构建响应式页面。 🌟 默认断点用法(移动优先) Tail…...

Arduino按键开关编程详解
一、按键开关的基本原理与硬件连接 1.1 按键开关的工作原理 按键开关是一种常见的输入设备,其核心原理基于机械触点的闭合与断开。当用户按下按键时,内部的金属片会连接电路两端,形成通路;松开按键后,金属片在弹簧作…...

鸢尾花(Iris)数据集的多模型分类与可视化分析工具
该程序是一个鸢尾花(Iris)数据集的多模型分类与可视化分析工具,主要功能如下: 1. 数据加载与预处理 功能说明: 使用sklearn.datasets.load_iris()加载经典的鸢尾花数据集。将数据转为pandas.DataFrame,并将类别数字标签映射为中文类别名(山鸢尾、变色鸢尾、维吉尼亚鸢尾…...
【软件设计师:复习】上午题核心知识点总结(一)
一、数据结构与算法(高频) 1. 线性数据结构 数组与链表 数组:随机访问(O(1))、插入/删除(O(n))、内存连续。链表:单向链表、双向链表、循环链表;插入/删除(O(1))、随机访问(O(n))。典型问题: 合并两个有序链表(LeetCode 21)。链表反转(迭代/递归实现)。栈与…...

[蓝桥杯 2023 国 Python B] 划分 Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[] arr new int[41];int sum 0;for (int i 1; i < 40; i) {arr[i] sc.nextInt();sum arr[i];}sc.close();int target sum / 2; // 最接近的两…...
Node.js 应用部署:镜像体积优化与安全的多阶段构建探索
Node.js 应用部署:镜像体积优化与安全的多阶段构建探索 在开发 Node.js 应用时,部署过程中的镜像体积优化和安全性保障是至关重要的环节。本文将通过两种不同的 Docker 部署方式,深入探讨如何实现高效的镜像体积优化和安全的部署环境。 传统的单阶段构建方式 许多开发者在…...
【Java面试笔记:进阶】23.请介绍类加载过程,什么是双亲委派模型?
Java的类加载机制是JVM的核心组成部分,其过程分为三个阶段,并采用双亲委派模型来保证类加载的安全性和一致性。 1.类加载过程 1.加载阶段(Loading) 核心任务:查找并加载类的二进制字节流(如.class文件)。具体行为: 将字节码数据从不同数据源(如文件系统、网络等)读…...

25.4.30数据结构|并查集 路径压缩
书接上回 上一节:数据结构|并查集 前言 (一)理论理解: 1、在QuickUnion快速合并的过程中,每次都要找根ID,而路径压缩让找根ID变得更加迅速直接。 2、路径压缩 针对的是findRootIndex()【查找根ID】进行的压…...

MATLAB R2024a安装教程
安装步骤: 软件大小:约12.08G 安装环境:Win10~Win11或更高 下载好安装包,可以在网上找个安装包,比如我用国内镜像matlab地址github.com/futureflsl/matlab-chinese-mirror,这样下载稍微快点 1.开始安装…...
ag-grid-react 列表导出csv列表getDataAsCsv (自定义导出列表配置)自定义新增,修改导出内容
1.ag-grid-react getDataAsCsv 新增导出字段 方法:临时添加列再导出 你可以通过 columnApi.setColumnDefs() 临时添加需要导出的字段,然后再调用 getDataAsCsv,导出后再恢复原来的列。 import { useRef } from react; import { AgGridReac…...

WEB安全--社会工程--SET钓鱼网站
1、选择要钓鱼的网站 2、打开kali中的set 3、启动后依次选择: 4、输入钓鱼主机的地址(kali)和要伪装的网站域名: 5、投放钓鱼网页(服务器域名:80) 6、获取账号密码...

Java学习手册:Spring 数据访问
一、Spring JDBC JdbcTemplate :Spring JDBC 提供了 JdbcTemplate 类,它简化了数据库操作,提供了丰富的 API 来执行数据库访问任务。JdbcTemplate 可以自动处理数据库连接的获取、释放,SQL 语句的执行,结果集的处理等…...

linux 使用nginx部署next.js项目,并使用pm2守护进程
前言 本文基于:操作系统 CentOS Stream 8 使用工具:Xshell8、Xftp8 服务器基础环境: node - 请查看 linux安装node并全局可用pm2 - 请查看 linux安装pm2并全局可用nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&…...

阿里云服务迁移实战: 07-其他服务迁移
概述 当完成了服务器、数据库、IP、OSS等迁移后,剩下的就是其他服务了。 短信网关 短信模板只能一个个创建,不能批量操作。但是可以使用以下方式优化操作。 在原账号导出模板列表 概述 当完成了服务器、数据库、IP、OSS等迁移后,剩下的…...

uniapp 实现低功耗蓝牙连接并读写数据实战指南
在物联网应用场景中,低功耗蓝牙(BLE)凭借其低能耗、连接便捷的特点,成为设备间数据交互的重要方式。Uniapp 作为一款跨平台开发框架,提供了丰富的 API 支持,使得在多个端实现低功耗蓝牙功能变得轻松高效。本…...

【Java学习笔记】递归
递归(recursion) 思想:把一个复杂的问题拆分成一个简单问题和子问题,子问题又是更小规模的复杂问题,循环往复 本质:栈的使用 递归的注意事项 (1)需要有递归出口,否者就…...
DigitalOcean推出Valkey托管缓存服务
今天我们激动地宣布推出DigitalOcean的Valkey托管缓存服务,这是我们全新的托管数据库服务,能够无缝替换托管缓存(此前称为托管Redis)。Valkey托管缓存服务在你一直依赖的功能基础上,还提供了增强工具来支持你的开发需求…...
ASP.NET MVC 入门指南四
21. 高级路由配置 21.1 自定义路由约束 除了使用默认的路由约束,你还可以创建自定义路由约束。自定义路由约束允许你根据特定的业务逻辑来决定一个路由是否匹配。例如,创建一个只允许特定年份的路由约束: csharp public class YearRouteCo…...

使用vue的插值表达式渲染变量,格式均正确,但无法渲染
如图,作者遇到的问题为,输入以下代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...