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

Java SE(7)——类和对象(二)

1.包(package)

1.1 包的定义

在Java中,是一种用于组织和管理类,接口和其他包的机制。主要作用是防止命名冲突,并提供一种访问控制机制

1.2 package关键字

在这里插入图片描述
package关键字的主要作用是声明当前类在哪个包里面。
当然,用户也可以自定义包,在自定义的包中编写用户自己的代码。不过,自定义包的时候应该遵循以下规范

  • 1.包名需要尽量指定成唯⼀的名字, 通常会用公司的域名的颠倒形式(比如:com.baidu.www)
  • 2.包名使用小写,一般使用英文
  • 3.如果一个java文件没有package语句,那么该java文件是被储存在一个默认包中(如:src)
  • 包名应与java文件实际的存储路径一致

1.3 使用import导入类

在Java中,JDK已经提供了很多现成的类供我们使用,如果我们要使用就有两种方式
(1)使用类的全限定名:包名+类名(一般不推荐)
在这里插入图片描述
(2)先导入包,再使用类名(常见用法)
在这里插入图片描述
在这里插入图片描述
这段代码的作用是:将java.util包(文件夹)下面的Arrays类导入到当前的java文件中,当用户需要使用Arrays时,编译器就会根据该代码的路径去定位Arrays类,这就体现了包的访问控制机制
如果需要使用java.util包里的其他类,可以这么导入

import java.util.*;

星号的意思不是导入java.util包里的全部类,而是当我们需要使用java.util里的某类时,根据这个路径去定位目标类

注意:
在这里插入图片描述
Date类在javautil和java.sql包中都有,如果使用星号来导入类,就无法区分使用哪个包中的Date类,解决办法如下:

  • 1.要么导入import java.util.Date,要么导入import java.sql.Date
  • 2.使用类的全限定名

2.访问限定修饰符(Access Modifiers)

Java中的访问限定修饰符一共有四个:publicprotecteddefaultprivate。主要用于控制方法变量可见性访问权限

2.1 default

如果没有使用任何访问限定修饰符,就是default(包私有)访问权限

修饰类时: 在这里插入图片描述
修饰成员变量/方法时: 在这里插入图片描述
在这里插入图片描述

2.2 pubilc

被public声明的类/变量/方法都可以被任意的其他类访问,无论它们是否在同一包里
修饰类时:
在这里插入图片描述
修饰成员变量/方法时:
在这里插入图片描述

2.3 封装&private

2.3.1 封装的概念

封装是面相对象编程的三大基本特性之一(其他两个是继承多态,后面的博文再介绍),指的是将类的数据(属性)和操作数据的方法绑定在一起,并对外隐藏内部实现的具体细节,仅提供必要的接口与外界交互。以电脑为例,电脑对外提供的接口就只是:开关机、通过键盘输入,显示器,USB插孔等,用户使用这些设备和电脑进行交互,完成日常事务
在这里插入图片描述
对于使用电脑的我们而言,只需要知道鼠标、键盘、开关机键等设备怎么使用就行了,至于为什么按了开机键电脑能亮起来,这个我们就不需要关心了。而要实现封装,就离不开private修饰符

2.3.2 private

使用private修饰的成员变量/方法只能在定义它们的类中访问,在外部类中一般是不能访问的(这里不考虑反射)
在这里插入图片描述
如果要访问使用private修饰的成员变量,可以对外提供一个get和set方法作为公开的接口,代码实现如下:

public class MyDate {private String year;private String month;private String day;/*//public MyDate() {this("2025","5","1");}public MyDate(String year, String month, String day) {this.year = year;this.month = month;this.day = day;}*///public String getYear() {return year;}public void setYear(String year) {this.year = year;}public String getMonth() {return month;}public void setMonth(String month) {this.month = month;}public String getDay() {return day;}public void setDay(String day) {this.day = day;}
}
class Test{public static void main(String[] args) {MyDate myDate = new MyDate();//使用get方法获取private修饰的成员变量System.out.println(myDate.getYear());System.out.println(myDate.getMonth());System.out.println(myDate.getDay());//使用set方法修改private修饰的成员变量myDate.setYear("2025");myDate.setMonth("5");myDate.setDay("1");//使用get方法获取private修饰的成员变量System.out.println(myDate.getYear());System.out.println(myDate.getMonth());System.out.println(myDate.getDay());}
}

运行结果如下:
在这里插入图片描述

  • 1.降低代码的耦合性:封装可以降低对象和对象之间的耦合度,当对象内部发生变化时,只需要修改对象内部即可,不会影响到外部程序,因为公开的接口是不会发生改变的。例如,当上述MyDate类中的year变量修改为Year1时,对外提供的接口还是getYear和setYear,不会影响到外部代码
  • 2.降低代码的复杂性:封装是隐藏了对象内部的实现细节,只提供了公开的接口给外部,使用起来更加简单
  • 3.提高安全性:封装可以隐藏对象的具体实现细节,阻止外部程序直接访问对象的内部状态,从而保护数据被意外修改或破坏

注意:

  • 1.类不能使用private修饰
  • 2.访问限定修饰符不能修饰方法内部的局部变量,因为局部变量超出该方法范围就不能访问了
  • 3.protected等到讲继承的时候在做介绍

3.static修饰符

static可以修饰成员变量/方法,至于static有什么用,这里先举个例子看看不适用static和使用static修饰的区别

3.1 static修饰成员变量

在这里插入图片描述
static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所
有对象所共享的
。当classroom不使用static修饰时,classroom变量存储在对象内部;当classroom使用static修饰时,classroom变量没有存储在对象内部。这是因为static成员属于本身,而不属于某个对象,在整个内存中只存在一份副本,被所有对象共享,存储在方法区中。
以上面的代码为例,假如实例化的所有学生对象都属于同一个班的学生,当classroom不不使用static修饰时,每个对象内部都会保存一份classroom成员变量;当使用static修饰后,classroom变量不依附于对象而存在,存储在方法区中,被所有的学生对象共享。使用static修饰后的直接好处是,classroom变量在内存中只有一份,而不需要保存多份
静态/类变量特性:

  • 1.不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  • 2.既可以通过对象的引用访问,也可以通过类名访问,但⼀般更推荐使用类名访问
  • 3.静态/类变量存储在方法区
  • 4.生命周期和一致(随类的加载而创建,随类的卸载而销毁)

3.2 static修饰成员方法

在Java中,使用static修饰的方法称为静态方法,是类的方法,不属于某个对象

public class Student {public String name;public int age;//静态成员变量public static String classroom;//构造方法public Student(String name, int age) {this.name = name;this.age = age;}//静态方法public static String getClassroom(){return classroom;}
}

静态方法的特性:

  • 1.是类的方法,不属于某个对象
  • 2.既可以通过对象的引用访问,也可以通过类名访问,但⼀般更推荐使用类名访问
  • 3.静态方法内部不允许使用非静态的成员变量和方法
    在这里插入图片描述
    因为在调用非静态成员变量/方法时,会使用this引用,但是静态方法不属于某个对象,无法传递this引用。如果需要在静态方法中访问非静态成员变量/方法,只能通过对象来访问
public class Student {public String name;public int age;//静态成员变量public static String classroom;//构造方法public Student(String name, int age) {this.name = name;this.age = age;}//public void print(){System.out.println(name + " " + age);}//静态方法public static String getClassroom(){//实例化对象Student student = new Student("王五",20);return student.name;}
}

3.3 静态成员变量的初始化

静态成员变量一般不适用构造方法来初始化,因为构造方法是给某个对象来初始化变量,而静态变量是类的变量,被所有对象共享。所有静态成员变量的初始化分为:就地初始化静态代码块初始化

3.3.1 就地初始化

在定义变量的时候指定初始值

public static String classroom = "100";

3.3.2 静态代码块初始化

那么接下来就要介绍什么是代码块了

4.代码块

使用{}包围起来的代码就叫做代码块,根据代码块定义的位置和使用的关键字可分为四种

4.1 普通代码块

普通代码块:在方法中定义的代码块

public class demo1 {public static void main(String[] args) {{int a = 1;System.out.println("a = " + a);}int a = 2;System.out.println("a = " + a);}
}

运行结果:
a = 1
a = 2

4.2 构造/实例代码块

构造/实例代码块:在类中定义的代码块,一般用于初始化非静态成员变量

public class Student {public String name;public int age;//构造方法public Student(String name, int age) {this.name = name;this.age = age;}//public void print(){System.out.println(name + " " + age);}//构造/实例代码块{this.name = "八戒";this.age = 1000;}
}
class Test{public static void main(String[] args) {Student student1 = new Student("张三",18);student1.print();}
}

运行结果:
张三 18

根据运行结果可以判断出,实例代码块的执行时间比构造方法早(和定义的位置无关,因为上述代码中构造方法定义在前,但仍然是实例代码块先执行)

注意: 如果非静态成员变量有就地初始化操作,此时实例代码块和非静态成员变量谁先赋值就取决于它们定义的位置关系
在这里插入图片描述

4.3 静态代码块

public class Student {public String name;public int age;//静态成员变量public static String classroom;//构造方法public Student(String name, int age) {this.name = name;this.age = age;}//静态代码块static {classroom = "100";System.out.println("静态代码块执行");}
}
class Test{public static void main(String[] args) {Student student1 = new Student("张三",18);Student student2 = new Student("李四",19);System.out.println("classroom = " + Student.classroom);}
}

执行结果:
静态代码块执行
classroom = 100

注意:

  • 1.不论实例化多少对象,静态代码块只会执行一次。上述代码实例化了两个对象,但是静态代码块只执行了一次
  • 2.如果存在多个静态代码块,编译时会按照定义的先后顺序来执行
  • 3.如果静态成员变量有就地初始化操作,此时静态代码块和静态成员变量谁先赋值就取决于它们定义的位置关系
public class Student {public String name;public int age;//静态代码块1static {classroom = "100";System.out.println("静态代码块1执行");}//静态代码块2static {classroom = "200";System.out.println("静态代码块2执行");}//静态成员变量public static String classroom = "300";//构造方法public Student(String name, int age) {this.name = name;this.age = age;}
}
class Test{public static void main(String[] args) {Student student1 = new Student("张三",18);Student student2 = new Student("李四",19);System.out.println("classroom = " + Student.classroom);}
}

执行结果:
静态代码块1执行
静态代码块2执行
classroom = 300

4.4 同步代码块

使用synchronized修饰的代码块,主要和多线程有关,这里不再详细讲解,我以前的博客中讲过

相关文章:

Java SE(7)——类和对象(二)

1.包(package) 1.1 包的定义 在Java中,包是一种用于组织和管理类,接口和其他包的机制。主要作用是防止命名冲突,并提供一种访问控制机制 1.2 package关键字 package关键字的主要作用是声明当前类在哪个包里面。 当然,用户也可以…...

Python 装饰器优化策略模式:电商促销折扣的优雅解法

问题背景:促销策略的重复陷阱 在电商促销系统中,我们曾面临这样的痛点: promos [fidelity_promo, bulk_item_promo, large_order_promo] # 6.1节原始方案 def best_promo(order):return max(promo(order) for promo in promos)当新增new…...

redis延时队列详细介绍

Redis延时队列是一种利用Redis数据结构的功能来实现延时任务调度的方法。在Redis中,常用的数据结构包括List(列表)和Sorted Set(有序集合)。延时队列通常是通过有序集合来实现的。 具体实现步骤如下: 将延…...

PHP 开发工程师如何借助 DeepSeek 提升工作效率

在当今数字化时代,PHP 开发工程师面临着不断提高工作效率和应对复杂项目需求的挑战。DeepSeek 作为一款先进的人工智能工具,为 PHP 开发工程师提供了一系列强大的功能,能够显著助力其日常工作。从代码生成与优化,到文档撰写和知识…...

Vibe Coding 新时代:AI 辅助编程完全指南

第一章:什么是 Vibe Coding?AI 编程的新范式 在传统编程的世界里,程序员需要掌握语法、算法和框架,一行一行地编写代码。但随着人工智能的快速发展,一种全新的编程方式正在兴起——这就是 Vibe Coding(氛围编程)。 Vibe Coding 的定义 Vibe Coding 是由 AI 研究者 An…...

Oracle RAC ‘Metrics Global Cache Blocks Lost‘告警解决处理

1. 引言: 前段时间鄙人检查处理过Oracle RAC Metrics Global Cache Blocks Lost’告警,在此总结分享下针对该报警的原因分析及处理办法。 2. 具体事件 通过排查发现造成该告警的原因是共享存储控制器损坏导致的。由于发生已经有段时间了,没…...

Go语言入门基础:协程

第21章 协程 目录 21.1 启动Go协程 协程的概念与特点启动协程的方法及示例协程执行顺序的控制 21.2 通道 通道类型及表示方式21.2.1 实例化通道21.2.2 数据缓冲21.2.3 单向通道21.2.4 通道与select语句 21.3 互斥锁 协程并发访问的逻辑问题互斥锁的使用示例 21.4 WaitGroup类…...

Servlet+tomcat

serverlet 定义:是一个接口,定义了java类被浏览器(tomcat识别)的规则 所以我们需要自定义一个类,实现severlet接口复写方法 通过配置类实现路径和servlet的对应关系 执行原理 当用户在浏览器输入路径,会…...

中间件和组件

文章目录 1. 前言2. 中间件介绍3. 组件介绍4. 区别对比5. 简单类比6. 总结 中间件和组件 1. 前言 中间件和组件是软件开发中两个重要的概念,但它们的定位和作用完全不同。中间件解决的事通信、跨系统、安全等问题,组件是解决具体业务模块,提高…...

piccolo-large-zh-v2 和 bge-m3哪个效果好?

环境: piccolo-large-zh-v2 bge-m3 问题描述: piccolo-large-zh-v2 和 bge-m3哪个效果好? 解决方案: 比较Piccolo-large-zh-v2(商汤)与BGE-M3(智源)的效果时,需结合…...

《告别试错式开发:TDD的精准质量锻造术》

深度解锁TDD:应用开发的创新密钥 在应用开发的复杂版图中,如何雕琢出高质量、高可靠性的应用,始终是开发者们不懈探索的核心命题。测试驱动开发(TDD),作为一种颠覆性的开发理念与方法,正逐渐成…...

哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础

文章目录 一、密码哈希函数概述1.1 哈希函数的基本概念1.2 哈希函数在数据安全中的应用 二、SHA-2系列算法详解2.1 SHA-2的起源与发展2.2 SHA-256技术细节与实现2.3 SHA-384和SHA-512的特点2.4 SHA-2系列算法的安全性评估 三、SHA-3系列算法详解3.1 SHA-3的起源与设计理念3.2 K…...

CUDA输出“hello world”

在我们学习任何一门编程语言的时候, 无疑当我们真正用其输出“hello world”的时候, 我们已经成功入门, 接下来要做的就是从入门到放弃了😆 接下来我们通过对比C和CUDA来学习CUDA的运行逻辑: C中的hello worldCUDA中的hello world文本编辑器编写源代码, 比如vscod…...

计算机视觉与深度学习 | 视觉里程计算法综述(传统+深度)

视觉里程计算法综述 1. 算法分类与原理1.1 传统几何方法1.2 深度学习方法2. 关键公式与模型2.1 本征矩阵分解2.2 深度学习模型架构3. 代码实现与开源项目3.1 传统方法实现3.2 深度学习方法实现4. 挑战与未来方向总结传统视觉里程计算法综述1. 算法分类与核心原理1.1 特征点法1.…...

c++ 函数参数传递

C 中的值传递和地址传递 在 C 中,函数参数传递主要有两种方式:值传递和地址传递(指针传递和引用传递都属于地址传递的变体)。 1. 值传递 特点 函数接收的是实参的副本对形参的修改不会影响原始变量适用于小型数据(…...

计算机视觉与深度学习 | 什么是图像金字塔?

图像金字塔详解 图像金字塔 图像金字塔详解1. **定义**2. **原理与公式****2.1 高斯金字塔****2.2 拉普拉斯金字塔**3. **代码示例****3.1 使用OpenCV实现****3.2 手动实现高斯模糊与降采样**4. **应用场景**5. **关键点总结**1. 定义 图像金字塔是一种多尺度图像表示方法,将…...

AI超级智能体教程(五)---自定义advisor扩展+结构化json输出

文章目录 1.自定义拦截器1.2自定义Advisor1.2打断点调试过程1.3Re-reading Advisor自定义实现 2.恋爱报告开发--json结构化输出2.1原理介绍2.1代码实现2.3编写测试用例2.4结构化输出效果 1.自定义拦截器 1.2自定义Advisor spring里面的这个默认的是SimpleloggerAdvisor&#…...

ActiveMQ 集群搭建与高可用方案设计(一)

一、引言 在当今分布式系统盛行的时代,消息中间件扮演着至关重要的角色,而 ActiveMQ 作为一款开源的、功能强大的消息中间件,在众多项目中得到了广泛应用。它支持多种消息传输协议,如 JMS、AMQP、MQTT 等 ,能够方便地实…...

MySQL数据操作全攻略:DML增删改与DQL高级查询实战指南

知识点4【MySQL的DDL】 DDL:主要管理数据库、表、列等操作。 库→表(二维)→列(一维) 数据表的第一行是 列名称 数据库是由一张或多张表组成 我们先学习在数据库中创建数据表 0、常见的数据类型: 1、…...

RabbitMQ 中的六大工作模式介绍与使用

文章目录 简单队列(Simple Queue)模式配置类定义消费者定义发送消息测试消费 工作队列(Work Queues)模式配置类定义消费者定义发送消息测试消费负载均衡调优 发布/订阅(Publish/Subscribe)模式配置类定义消…...

一种基于重建前检测的实孔径雷达实时角超分辨方法——论文阅读

一种基于重建前检测的实孔径雷达实时角超分辨方法 1. 专利的研究目标与实际问题意义2. 专利提出的新方法、模型与公式2.1 重建前检测(DBR)与数据裁剪2.1.1 回波模型与检测准则2.1.2 数据裁剪效果2.2 数据自适应迭代更新2.2.1 代价函数与迭代公式2.2.2 矩阵递归更新2.3 正则化…...

代购平台如何“说本地话,穿本地衣”

当海外消费者点开一个代购商城,看到满屏机械翻译的中式文案,他们大概率会默默关闭页面。还有数据显示,不符合本地审美的页面设计会导致70%的潜在客户流失,而专业的本地化改造能让订单转化率提升3倍以上。 01 AI翻译:让…...

C++调试(叁):编译qBreakpad并使用其生成Dump文件

目录 1.前言 2.生成Dump文件的第三方库 3.第三方库下载链接 4.编译qBreakpad 5.VS中使用qBreakpad 6.qBreakpad测试程序 前言 在第二篇文章中,我主要讲解了如何使用SetUnhandledExceptionFilter函数设置程序的异常回调,在设置的回调函数中调用MiniDumpWr…...

0基础 | STM32 | TB6612电机驱动使用

TB6612介绍及使用 单片机通过驱动板连接至电机 原因:单品机I/O口输出电流I小 驱动板:从外部引入高电压,控制电机驱动 电源部分 VM:电机驱动电源输入,输入电压范围建议为3.7~12V GND:逻辑电…...

Cycleresearcher:通过自动化评审改进自动化研究

1、引言 迄今为止,整个科学发现过程自动化的挑战在很大程度上仍未解决,特别是在生成和改进符合同行评审工作高标准的研究成果方面。此外,很少有工作涉及迭代反馈的整合,这对保持学术的健全性和新奇至关重要。当前的模型往往难以适…...

深入理解Redis SDS:高性能字符串的终极设计指南

📍 文章提示 10分钟掌握Redis核心字符串设计 | 从底层结构到源码实现,揭秘SDS如何解决C字符串七大缺陷,通过20手绘图示与可运行的C代码案例,助你彻底理解二进制安全、自动扩容等核心机制,文末附实战优化技巧&#xff…...

【tcp连接windows redis】

tcp连接windows redis 修改redis.conf 修改redis.conf bind * -::*表示禁用保护模式,允许外部网络连接 protected-mode no...

【AI平台】n8n入门6:调用MCP服务(非社区节点)

前言 前边用n8n搭建一个MCP服务,现在,用n8n调用其他服务商提供的MCP服务。本文以高德地图服务为例,记录一下操作过程。 实现案例功能 MCP是啥 MCP(Model Context Protocol,模型上下文协议)是由Anthropi…...

C++负载均衡远程调用学习之 Dns-Route关系构建

目录 1.LARS-DNS-MYSQL环境搭建 2.LARSDNS-系统整体模块的简单说明 3.Lars-Dns-功能说明 4.Lars-Dns-数据表的创建 5.Lars-Dns-整体功能说明 6.Lars-DnsV0.1-Route类的单例实现 7.Lars-DnsV0.1-Route类的链接数据库方法实现 8.Lars-DnsV0.1-定义存放RouteData关系的map数…...

Linux53 百度网盘运行(下载devtoolset11后仍提示stdc++3.0.29缺失 计划用docker容器隔离运行,计划后续再看)

算了 放弃 都用到docker了 计划先看看系统服务后续再研究吧 百度网盘运行(下载devtoolset11后仍提示stdc3.0.29缺失 计划用docker容器隔离运行 但是由于系统服务未扎实,计划后续再看 重新下了el7的版本 刚才已启动成功 单输入xlock不启动 切换用户也不启动 …...

ASP.NET MVC​ 入门与提高指南八

45. 神经形态计算与 MVC 应用性能革新 45.1 神经形态计算概念 神经形态计算是借鉴生物神经系统的结构和工作原理来设计计算系统。它模仿人脑神经元和突触的工作方式,具备低功耗、高并行性和自适应学习等特性,能在处理复杂感知和认知任务时展现出卓越的…...

Python刷题:流程控制(下)

今天刷的是PythonTip的Python 入门挑战中的题,整体难度不高,适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 在无人问津的角落里, 默默努力的人独自发光, 孤独是他们奋斗路上的常客, 却也是成就他们的…...

【Bootstrap V4系列】学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb)

Bootstrap V4系列 学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb) 徽章(Badge)一、示例二、根据情境改变外观三、胶囊式徽章(Pill badges)四、链接 面包屑导航&#xff0…...

结合强化学习RL和SFT各自训练优势,让模型边学边练,从而平衡Zero-RL训练中的模仿和探索!!

摘要:最近在大型推理模型(LRMs)方面的进展表明,通过简单的基于规则的奖励进行强化学习(RL),可以涌现出复杂的行为,例如多步推理和自我反思。然而,现有的零强化学习&#…...

ai之paddleOCR 识别PDF python312和paddle版本冲突 GLIBCXX_3.4.30

这里写自定义目录标题 问题一**解决方案****方法 1:使用符号链接将系统库链接到 Conda 环境** **补充说明****验证修复结果** 问题二:**问题根源****解决方案****1. 确认 TensorRT 安装状态****2. 安装 TensorRT 并配置环境变量****3. 验证 TensorRT 与 …...

C++ 单例模式详解

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。 概念解析 单例模式的核心思想是: 限制类的实例化次数,确保在整个应用程序中只有一个实例存在 提供对该实例的全局访问点 控制共享…...

生成器模式(Builder Pattern)

好问题!生成器模式(Builder Pattern)在现实生活和程序开发中非常常见,它适合创建**“一步一步搭建起来的复杂对象”**。 🧠 一句话定义 生成器模式(Builder Pattern)是一种将复杂对象的构建过程…...

计算机网络八股文--day4 --传输层TCP与UDP

这是面试中最常考到的一层:端到端(也就是进程之间)的透明数据传输服务,差错控制和流量控制 该层呈上启下,像上面的资源子网提高服务,并使用下面通信子网的服务 端口,用于唯一标识主机上进程的&…...

大型语言模型个性化助手实现

大型语言模型个性化助手实现 目录 大型语言模型个性化助手实现PERSONAMEM,以及用户资料和对话模拟管道7种原位用户查询类型关于大语言模型个性化能力评估的研究大型语言模型(LLMs)已经成为用户在各种任务中的个性化助手,从提供写作支持到提供量身定制的建议或咨询。随着时间…...

步进电机中断函数解释

STM32 motor111.c 中 HAL_TIM_PeriodElapsedCallback 函数逐行解释 下面我们对 STM32 项目中 motor111.c 文件里的 HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 函数进行逐行解析,帮助初学者理解每一行代码的作用。此函数是在定时器产生更新中断时被调…...

多把锁以及线程死锁问题

在 Java 中,每一个对象都可以作为一把锁,synchronized 通过获取对象头中的锁标志位来实现同步。当一个线程获取到对象的锁后,其他线程就无法再获取该锁,只能等待获取到锁的线程释放锁之后才能继续执行被 synchronized 修饰的代码块…...

Vue 3 Element Plus 浏览器使用例子

Element Plus 是一个基于 Vue 3 的流行开源 UI 库,提供了一系列的组件,帮助开发者快速构建现代化的用户界面。它的设计简洁、现代,包含了许多可定制的组件,如按钮、表格、表单、对话框等,适合用于开发各种 Web 应用。 …...

NoxLucky:个性化动态桌面,打造独一无二的手机体验

在数字时代,手机桌面的个性化设置已经成为许多人表达自我和展示个性的重要方式。今天,我们要介绍的 NoxLucky,就是这样一款功能强大的动态桌面手机应用。它不仅提供了独家的动态壁纸素材库,还支持将抖音、INS等平台的短视频直接设…...

如何在WORD WPS中输入英语音标 批量给英语标注音标

在我国,英语的学习,已经是贯穿小学到大学的课程,英语学习,关键是听说读写,而听说读,都离不开一个字--音,这就涉及到了英语的音标了。音标(Phonetics)是表示单词发音的一种…...

RUST变量学习笔记

1,作用域概念 捕获环境 2,所有权概念 Rust则是通过所有权和借用来保证内存安全。很多人不理解为啥说Rust是内存安全的,其实就是在默认情况下,你是写不出内存不安全的代码的。 Rust的所有权并不难理解,它有且只有如下…...

n8n工作流自动化平台的实操:本地化高级部署

一、本地高级部署 1.下载 docker pull docker.n8n.io/n8nio/n8n 2.运行 docker volume create n8n_data docker run -dit --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n -e N8N_SECURE_COOKIEfalse -e N8N_RUNNERS_ENABLEDtrue -e N8N_ENFORCE_SETTINGS_FIL…...

【Ansible自动化运维实战:从Playbook到负载均衡指南】

本文是「VagrantVirtualBox虚拟化环境搭建」的续篇,深入探索Ansible在自动化运维中的核心应用: ✅ Ansible核心技能:Playbook编写、角色(Roles)模块化、标签(Tags)精准控制 ✅ 实战场景覆盖&a…...

数据赋能(210)——质量管理——可靠性原则

概述 数据可靠性原则确保数据的准确性、完整性、一致性和可信性,是决策和业务活动对数据质量的基本要求。在信息化和数字化快速发展的今天,数据已成为企业的重要资产,数据可靠性直接影响到企业的决策质量和业务活动效果。数据可靠性是数据质…...

二、机器学习中Python变量基础

二、Python变量基础 像C语言和Matlab一样,变量名由字母、数字、下划线组成(但不能以数字开头,字母区分大小写)变量名不能与内置的函数同名。 根据变量是否可以充当容器,将变量类型分为基本类型和高级类型。 基本变量…...

有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置

JGQ112Ⅱ有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置 一.实验目的 1.熟悉活性炭吸附剂的特性和在SO2气体净化方面的应用。 2.掌握活性炭吸附法的流程和实验过程中各参数的控制方法。 3.了解主要参数变化对吸附效率的影响。 4.掌握吸附等温线概念和测定方法。 二.技术…...