JavaSE——类与对象(4)
一、静态变量
1.1为什么要有静态变量
现在有一群小朋友在做游戏,不是有新的小朋友加入,请问如何知道现在共有多少人在完?看这段代码:
public class first {public static void main(String[] args) {int count = 0;child child1 = new child("小明");child1.join();++count;child child2 = new child("小红");child2.join();++count;child child3 = new child("小李");child3.join();++count;}
}class child{private String name;public child(String name){this.name=name;}public void join(){System.out.println(name + "加入了游戏");}
}
这种实现方法中,count是一个独立于对象的变量,不符合Java面向对象的特点,并且访问起来比较麻烦。如果有一个变量能够表示对象的总个数,我们在创建一个对象时,就把这个变量加1,并且这个变量是所有同类对象共享的就ok了。因此这里引入了静态变量。
1.2什么是静态变量
在定义一个成员变量时,如果使用static关键字修饰它,则该成员变量又可被称为静态变量或类变量,它是该类的所有对象共享的变量,任何一个该类的对象访问它时,取到的都是相同的值。它随着类的加载而创建,即使没有创建对象实例也可以访问。
public class first {public static void main(String[] args) {child child1 = new child("小明");child1.join();++child.count;child child2 = new child("小红");child2.join();++child.count;child child3 = new child("小李");child3.join();++child.count;}
}class child{private String name;public static int count = 0;//静态变量public child(String name){this.name=name;}public void join(){System.out.println(name + "加入了游戏");}
}
1.3静态变量内存分析
我们知道,Java的内存空间被分为栈区、堆区和方法区,静态变量具体存在于那一块由JDK决定。
- JDK8以前,静态变量存放在方法区中。
- JDK8以后,类加载后会在堆中生成一个对应的class对象,这时,静态变量存放在堆中反射的class对象的尾部。
不管静态变量在哪,我们只要记住:
- static变量由同一个类的所有对象共享。
- static变量在类加载的时候就生成了。
1.4静态变量的使用
定义的基本语法:
访问修饰符 static 数据类型 变量名;//推荐static 访问修饰符 数据类型 变量名;//也可以
访问的基本语法:
静态变量的访问修饰符的访问权限和范围与普通属性一样。
类名.静态变量名;//推荐对象名.静态变量名;//也可以
二、静态方法
2.1静态方法的使用场景
当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。如果我们希望不创建实例,也可以调用某个方法,那么将其设计为静态方法就非常合适。
2.2静态方法的使用
静态方法也叫类方法。
定义的基本语法:
访问修饰符 static 数据返回类型 方法名(){ }//推荐
static 访问修饰符 数据返回类型 方法名(){ }
调用的基本语法,前提是满足访问修饰符的访问权限和范围:
类名.静态方法名
对象名.静态方法名
比如说:
public class first {public static void main(String[] args) {System.out.println(Mytools.calsum(10.2,52.3));//62.5}
}class Mytools{public static double calsum(double n1, double n2){return n1 + n2;}
}
这里直接才类名.静态方法名就成功调用了该函数。
2.3静态方法的细节
- 静态方法和普通方法都随着类的加载而加载,将结构信息存储在方法区。类中没有this的参数,普通方法中也许存在。
- 静态方法可以通过类名调用,也可以通过对象名调用。
- 普通方法和对象有关,不能通过类名调用。
- 静态方法中不允许使用和对象有关的关键字,比如this和super。
- 静态方法只能访问静态变量和静态方法,而普通方法既可以访问普通变成员也可以访问静态成员。
三、main方法
3.1main语法说明
public static void main(String[] args)
- main方法由Java虚拟机调用,所以访问权限必须是public。
- Java虚拟机在调用时不会创建对象,所以该方法必须是static。
- args数组保存执行java命令时传递给所运行的类的参数。
3.2main特别说明
- 在main方法中,我们可以直接调用main方法所在类的静态方法或者静态属性。
- 但是,不能直接访问该类的非静态成员,必须创建一个该类的实例对象后,才能通过这个类区访问类中的非静态成员。
public class first {int age = 10;static int k = 20;public static void main(String[] args) {first obj = new first();System.out.println(age);//不可以System.out.println(obj.age);//可以System.out.println(k);//可以}
}
四、代码块
4.1为什么要有代码块
如果多个构造器中都有重复的语句,那么就可以将它们抽取到初始化块中,提高代码的重用性,相当于另一种形式的构造器,可以做初始化的操作。
4.2什么是代码块
代码化块又称为初始化块,属于类中的成员(即类的一部分),类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但它和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不需要通过对象或者类显示调用,而是加载类时,或创建对象时隐式调用。
基本语法:
[修饰符]{代码;
};
- 这里的修饰符可写可不写,要写的话只能是static。
- 使用static修饰的被称为静态代码块,没有static修饰的,叫做普通代码块。
- ;号可写可不写。
4.3代码块使用细节
- static代码块又叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而进行,并且只会执行一次。如果是普通代码块,每创建一个对象就会执行一次。
- 类什么时候被加载,类即使多次被加载,也只会执行一个static代码块:
- 创建对象实例时。
- 创建子对象实例时,父类也会被加载。
- 使用类的静态成员时。
- 子类使用静态成员时,父类也会被加载。
- 普通代码块,在创建实例时,会被隐式的调用,被创建一次调用一次,如果只是使用类的静态成员,普通代码块并不会执行。
- 对象创建时,一个类的调用顺序是:
- 首先调用静态代码块和静态属性初始化,它们的优先级一样,按定义的顺序调用。
- 再调用普通代码块和普通属性初始化,按定义顺序调用。
- 调用构造方法。
- 构造器的最前面,隐含了super方法和调用普通代码块以及普通属性初始化。
public class first {public static void main(String[] args) {B b = new B();//输出为01->02->03->04} }class A{static{System.out.println("01");}{System.out.println("02");}public A(){//代码块} }class B extends A{{System.out.println("03");};public B(){//super()//调用普通代码块和普通属性初始化System.out.println("04");} }
创建一个B类的对象,B类本身没有静态代码块,所以直接加载A类的静态代码块,第一个输出为01,然后B的构造器中,会先调用A的构造器,A的构造器调用A自己的普通代码块,输出为02,然后调用B自己的普通代码块,输出03,最后执行自己的构造器输出04。
- 一个子类创建一个子类对象时,它们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造起的调用顺序如下执行:
- 父类的静态代码块和静态属性。
- 子类的静态代码块和静态属性。
- 父类的普通代码块和普通属性初始化。
- 父类的构造方法。
- 子类的普通代码块和普通属性初始化。
- 子类的构造方法。
- 静态代码块只能调用静态成员,普通代码块可以调用任意成员。
五、final关键字
5.1final关键字使用场景
- 使一个类不能再被继承。
- 使一个方法不能被重写。
- 当不希望类的某个属性的值被修改。
- 当不希望某个局部变量被修改。
5.2final关键字使用细节
- final修饰的属性又叫做常量,一般用 xx_xx_xx来命名
- final修饰符的属性再定义时,必须赋初值,并且以后不能再修改,赋值可以如下位置之一
- 定义时。
- 在构造器中。
- 在代码块中。
- 如果final修饰的属性是静态的,则初始化的位置只能是定义时或者静态代码块中,不能在构造器中赋值,因为静态属性在定义是需要被赋初值,但是构造器要在实例化的时候才会被调用。
- final类不能继承,但是可以实例化对象。
- 如果类不是final类对象,但是具有final方法,则该方法虽然不能重写,但是可以被继承。
- 如果一个类已经是final类了,就没必要再给它的方法添上final关键字。
- final不能修饰构造器。
- final和static往往搭配使用,这样不会导致类加载,可以提高效率。
相关文章:
JavaSE——类与对象(4)
一、静态变量 1.1为什么要有静态变量 现在有一群小朋友在做游戏,不是有新的小朋友加入,请问如何知道现在共有多少人在完?看这段代码: public class first {public static void main(String[] args) {int count 0;child child1 …...
网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
目录 1,网络字节序和主机字节序 2. 函数的具体作用 2.1,htonl(Host to Network Long) 2.2,htons(Host to Network Short) 2.3,ntohl(Network to Host Long) 2.4,ntohs(Network to Host Sho…...
如何在HarmonyOS NEXT中处理页面间的数据传递?
大家好,前两天的Mate70的发布,让人热血沸腾啊,不想错过,自学的小伙伴一起啊,今天分享的学习笔记是关于页面间数据伟递的问题,在HarmonyOS NEXT 5.0 中,页面间的数据传递可以有很多种方式&#x…...
【Code First】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 …...
Day28 贪心算法 part02
122.买卖股票的最佳时机II 本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜! class Solution {public int maxProfit(int[] prices) {//分析每一天的情况。只要保证今天买,明天卖可以不亏钱,那就是最大的利润。把每一天可以赚钱的机会都不放过,先把能挣…...
JVM_栈详解一
1、栈的存储单位 **栈中存储什么?**, 每个线程都有自己的栈,栈中的数据都是以栈帧(Stack Frame)的格式存在。在这个线程上正在执行的每个方法都各自对应一个栈帧(Stack Frame)。 栈帧是一个内存…...
深入浅出UART驱动开发与调试:从基础调试到虚拟驱动实现
往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍深入理解TTY体系:设备节点与驱动程序框架详解Linux串口应用编程:从UART到GPS模块及字符设备驱动 解UART 子系统:Linux Kernel 4.9.88 中的核心结构体与设计详解IMX 平台UART驱…...
集成量子光子学(IQP)
IQP 正在成为量子计算的可行替代方案量子源、波导和调制器等领域的研究使这成为可能与 CMOS 技术的兼容意味着工业可扩展性将更加容易 量子光子学的基本组成部分 IQP 系统的基本组成部分包括: 来源(例如腔体中的 QD) 波导定向耦合器&#…...
【代码随想录|贪心算法02】
122.买股票的最佳时机 题目链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii 好巧妙的一道题啊,做之前完全不会想到这种解法。 局部最优:收集每天正利润 全局最优:求得最大利润 这道题只让你返回最大的利润和&…...
CentOS7 使用xtrabackup备份及恢复
安装备份工具 1.安装Percona yum存储库 sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm安装过程中需要按y继续安装 2.启用Percona Server 5.7存储库 sudo percona-release setup ps573、安装percona-xtrabackup-24 sudo yum -y instal…...
【网络安全设备系列】12、态势感知
0x00 定义: 态势感知(Situation Awareness,SA)能够检测出超过20大类的云上安全风险,包括DDoS攻击、暴力破解、Web攻击、后门木马、僵尸主机、异常行为、漏洞攻击、命令与控制等。利用大数据分析技术,态势感…...
VM Virutal Box的Ubuntu虚拟机与windows宿主机之间设置共享文件夹(自动挂载,永久有效)
本文参考如下链接 How to access a shared folder in VirtualBox? - Ask Ubuntu (1)安装增强功能(Guest Additions) 首先,在网上下载VBoxGuestAdditions光盘映像文件 下载地址:Index of http://…...
【docker集群应用】Docker--harbor私有仓库部署与管理
文章目录 Harbor特性Harbor构成Harbor部署与管理Harbor 部署实例环境准备1. 部署 Docker-Compose 服务2. 部署 Harbor 服务(1) 下载并解压 Harbor 安装程序(2) 修改 Harbor 配置文件 3. 启动 Harbor4. 查看 Harbor 启动镜像5. 创建一个新项目6. 在其他客户端上传镜像 维护管理 …...
【优选算法】位运算
目录 常见位运算总结1、基础位运算2、给一个数n,确定它的二进制位的第x位上是0还是13、将一个数n的二进制位的第x位改成14、将一个数n的二进制位的第x位改成05、位图的思想6、提取一个数n的二进制位中最右侧的17、将一个数n的二进制位中最右侧的1变为08、位运算的优…...
2.mybatis整体配置
文章目录 mybatis-config.xml介绍SqlSessionFactoryBuilderXMLConfigBuilderpropertiessetting类型别名(typeAliases)扫描插件(plugins)解析objectFactory(对象工厂)解析objectWrapperFactory解析reflectorFactorysettingsElement()方法环境配置…...
js中判断数组和判断对象的方法
判断数组 Array.isArray() 方法 这是最推荐的方法,简单明了。它可以检测数组的情况,并且不会误报其他类型。 const arr [1, 2, 3]; console.log(Array.isArray(arr)); // trueconst notArray { key: value }; console.log(Array.isArray(notArray))…...
【godot】如何立刻(实时)进行碰撞检测?
因为最近在做帧同步方面的内容,所以发现了这个问题。 方案1:用Area2d进行碰撞检测,绑定body_entered信号。 缺陷: Area2d的碰撞检测只会每个物理迭代中只会执行一次,即在physics_process()结束后执行一次。 场景&a…...
讨论JAVA、JVM与Spring
Q1: 作为一个JAVA开发人员,对于jvm肯定不陌生,但很多人对它不陌生也仅止于概念上,而且对概念也是模糊不清的,但jvm实际是java程序运行在其中的实际存在的环境,对它的理解应该要是具象化的。 我们还是从一项技术产生的…...
基于SpringBoot实现的民宿管理系统(代码+论文)
🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…...
vue2 - 22.vant 组件库
vant 组件库 vant2下载: npm i vantlatest-v2 --legacy-peer-deps 目标:认识第三方 Vue组件库 vant-ui 组件库:第三方 封装 好了很多很多的 组件,整合到一起就是一个组件库。 https://vant-contrib.gitee.io/vant/v2/#/zh-CN…...
Git简单介绍
一、 Git介绍与安装 1.1 Git简介 Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 1.2集中式(SVN) VS 分布式(git) 集中式版本控制系统,版本库是集中存放在中央服务器的,工作时要先从中央…...
【ArcGIS Pro实操第11期】经纬度数据转化成平面坐标数据
经纬度数据转化成平面坐标数据 数据准备ArcGIS操作步骤-投影转换为 Sinusoidal1 投影2 计算几何Python 示例 另:Sinusoidal (World) 和 Sinusoidal (Sphere) 的主要区别参考 数据准备 数据投影: 目标投影:与MODIS数据相同(Sinu…...
六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
本章讲述数据结构中的六大排序算法 欢迎大佬们踊跃讨论,感谢大家支持! 我的博客主页链接 六大排序算法 一.插入排序1.1 直接插入排序1.2 希尔排序 二.选择排序2.1 单向选择排序2.2双向选择排序2.3 堆排序 三.交换排序3.1 冒泡排序3.2 快速排序3.2.1 Hoa…...
量化交易系统开发-实时行情自动化交易-4.4.1.做市策略实现
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说做市策略实现。 做市策…...
Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs 1. Animator 组件的引用 (anim) 该脚本通过 Animator 控制 UI 元…...
线上+线下≠新零售,6大互通诠释新零售的核心要点-亿发
新零售,这个词汇在近年来频繁出现在我们的视野中,它不仅仅是线上与线下的简单相加,而是一场深刻的商业变革。本文将通过6大互通的核心要点,为您揭示新零售的真正内涵。 1. 商品的互联互通 新零售模式下,商品的互联互…...
渗透测试学习笔记(一)渗透测试方法论
一.渗透测试方法论 渗透测试方法论是制定实施信息安全审计方案时,需要遵循的规则,惯例和过程。人们在评估网络,应用,系统或者三者组合的安全状态时,不断摸索各种实务的理念和成熟的做法,并总结了一套理论-…...
国外媒体发布新闻稿/海外媒体网站发稿创历史新潮流
国外媒体发布新闻稿/海外媒体网站发稿创历史新潮流 外媒发稿谷歌 SEO 优化经典案例冲出媒体宣发新高潮在当今数字化的时代,媒体宣发的重要性日益凸显。无论是企业品牌推广、产品发布,还是个人形象塑造,有效的媒体宣发都能带来巨大的影响力和…...
Three.js渲染较大的模型之解决方案
文章目录 Three.js渲染较大的模型 解决方案视锥体剔除实例 和 遮挡剔除 实例视锥体剔除(Frustum Culling)实例原理概述代码示例解释 遮挡剔除(Occlusion Culling)实例原理概述代码示例解释 three.js 模型压缩 Three.js渲染较大的模…...
webpack 项目访问静态资源
使用 webpack dev serve 启动 react 项目后,发现无法使用 http://localhost:8080/1.png 访问到项目的 /static 目录下的 1.png 文件。我的 webpack-dev.js 配置如下: const webpack require(webpack) const webpackMerge require(webpack-merge) cons…...
Day 25
491.递增子序列 力扣题目链接(opens new window) 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: …...
【金猿案例展】无锡征信——百望云绿色金融数据要素+数据资产入表服务方案...
百望云数据要素案例 该数据要素项目案例由百望云投递并参与“数据猿年度金猿策划活动——2024数据要素产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化浪潮奔涌的时代,数据要素已成为驱动经济发展的关键引擎&…...
【C++】C++新增特性解析:Lambda表达式、包装器与绑定的应用
V可变参数模板与emplace系列 C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现…...
python学opencv|读取图像
【1】引言 前序学习了使用matplotlib模块进行画图,今天开始我们逐步尝试探索使用opencv来处理图片。 【2】学习资源 官网的学习链接如下: OpenCV: Getting Started with Images 不过读起来是英文版,可能略有难度,所以另推荐一…...
租辆酷车小程序开发(二)—— 接入微服务GRPC
vscode中golang的配置 设置依赖管理 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct GO111MODULEauto 在$GOPATH/src 外面且根目录有go.mod 文件时,开启模块支持 GO111MODULEoff 无模块支持,go会从GOPATH 和 vendor 文件夹寻找包…...
leetcode 208. 实现 Trie (前缀树)
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象…...
kafka进阶_3.消费消息
文章目录 一、消费消息概览1.1、消费示例代码1.2、消费过程 二、消费者组2.1、push & pull2.2、消费者组 三、调度器Coordinator四、消费者分配策略4.1、引言4.2、分配基本流程4.3、分配策略4.3.1、轮询分配策略4.3.2、轮询分配策略 五、消费偏移量5.1、起始偏移量5.2、指定…...
预测未来 | MATLAB实现Transformer时间序列预测未来
预测未来 | MATLAB实现Transformer时间序列预测未来 预测效果 基本介绍 1.Matlab实现Transformer时间序列预测未来; 2.运行环境Matlab2023b及以上,data为数据集,单变量时间序列预测; 3.递归预测未来数据,可以控制预…...
VirtualBox7.0.6安装配置
VirtualBox7.0.6安装配置 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 文章目录 VirtualBox7.0.6安装配置1.安装虚拟机1.1安装虚拟机的必要条件1.1.1开启虚拟化1.1.1.1检查虚拟化是否开启1.1.1.2 开启虚拟化 1.2 安装虚拟机1.1创建…...
Spring Boot英语知识分享网站:技术与实践
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)
文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…...
AI赋能公共服务转型升级 | 第十届中国行业互联网大会暨腾讯云TVP行业大使三周年庆典公共服务专场圆满举办!
引言 党的二十大报告把“基本公共服务实现均等化”作为 2035 年我国发展的总体目标之一,强调要“健全基本公共服务体系,提高公共服务水平”。AI 作为新质生产力的核心驱动力之一,正在公共服务领域发挥着越来越重要的作用。 2024 年 10 月 2…...
网络基础 - 地址篇
一、IP 地址 IP 协议有两个版本,IPv4 和 IPv6IP 地址(IPv4 地址)是一个 4 字节,32 位的正整数,通常使用 “点分十进制” 的字符串进行表示,例如 192.168.0.1,用点分割的每一个数字表示一个字节,范围是 0 ~…...
chrome允许http网站打开摄像头和麦克风
第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址,点击启用 第三步 重启 Chrome:设置完成后,点击页面底部的 “Relaunch” 按钮,重新启动 Chrome 浏览器,使更改生效。...
uniapp前端开发,基于vue3,element plus组件库,以及axios通讯
简介 UniApp 是一个基于 Vue.js 的跨平台开发框架,旨在通过一次开发、编译后运行在多个平台上,如 iOS、Android、H5、以及小程序(微信小程序、支付宝小程序、百度小程序等)等。UniApp 为开发者提供了统一的开发体验,使…...
STM32-- 串口发送数据
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)RESET);?? 答: 这行代码: while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) RESET);的作用是等待串口 USART2 的发送数据寄存器(TXE,Transmit Dat…...
网络安全提示
如果您是企业主或 IT 经理,您应该知道计算机安全的重要性。从保护密码安全的基础知识到网络钓鱼、恶意软件等的危险,本文将为您提供您需要了解的有关网络安全的信息。 每年,互联网都变得越来越大,这意味着我们为黑客和网络犯罪分…...
【计算机网络】多路转接之epoll
epoll也是一种linux中的多路转接方案(epoll也是只负责IO过程中的"等") 一、epoll相关接口的使用 1.epoll_create int epoll_create(int size); 功能:创建一个epoll模型 ① int size:没意义了 >0就行 返回值:返回一个文件…...
nextjs+nestjs+prisma写todolist全栈项目
技术栈 nextjsnestjsprisma所学知识 Nextjs组件渲染,状态,路由docker启动Mysql容器prisma操作Mysql(CRUD)允许跨域请求APITanStack Query异步状态管理fetch api服务器组件预请求数据nestjs 管道和异常处理检测id是否正整数Docker启动Mysql容器 compose.yml name: todoLis…...
重构代码之将双向关联改为单向关联
在代码重构中,双向关联改为单向关联是指将原本双向关联转变为单向关联。这种重构方式有助于简化对象模型和提高代码的可维护性,减少不必要的耦合。下面是对这个重构技巧的详细讲解。 一、为什么需要将双向关联改为单向关联? 减少耦合&#…...