【潜意识Java】探寻Java子类构造器的神秘面纱与独特魅力,深度学习子类构造器特点
目录
一、子类构造器的诞生背景
(一)为啥要有子类构造器?
(二)子类与父类构造器的关系
二、子类构造器的调用规则
(一)默认调用父类无参构造器
(二)显式调用父类构造器
(三)构造器链的形成
三、子类构造器中的初始化顺序
(一)先初始化父类成员,再初始化子类成员
(二)静态成员的初始化时机
四、子类构造器与方法重写的关系
(一)构造器中调用可重写方法的风险
(二)正确的使用方式
五、子类构造器在实际开发中的应用场景
(一)图形绘制系统中的子类构造器
(二)游戏角色创建中的子类构造器
宝子们,今天咱们来深入挖掘 Java 中一个非常关键但又有点让人摸不着头脑的知识点 —— 子类构造器。当我们在 Java 的世界里创建子类对象时,子类构造器就像是一个幕后的魔法工匠,默默地构建出符合我们需求的对象实例。它有着一些独特的特点和规则,掌握好这些,能让我们的代码更加健壮、灵活,并且能够更好地理解 Java 面向对象编程的精髓。接下来,就让我们一步步揭开子类构造器的神秘面纱。
一、子类构造器的诞生背景
(一)为啥要有子类构造器?
个人观点嘛,你就想象一下,我们有一个基类(父类),它就像是一个汽车的基础模板,定义了汽车的一些基本属性和行为,比如有轮子、引擎,能跑能停。现在,我们想要创建一个子类,比如一辆跑车,它不仅具有汽车的基本特性,还拥有自己独特的属性和行为,比如更快的速度、更酷炫的外观。子类构造器的作用就是在创建这个跑车对象时,既要确保它继承了汽车的基本构造,又能对其独特的属性进行初始化,使它成为一个完整且独特的跑车实例。
当然......
你在实际编程中,父类可能定义了一些通用的属性和方法,子类在继承这些的基础上,通过自己的构造器来扩展和定制,以满足特定的业务需求。例如,在一个图形绘制的系统中,有一个父类 Shape
,它定义了颜色、位置等基本属性和绘制的基本方法。子类 Circle
和 Rectangle
除了继承这些基本属性和方法外,还需要通过自己的构造器来初始化半径(对于圆形)和长、宽(对于矩形)等特定属性,这样才能准确地绘制出不同的图形。
(二)子类与父类构造器的关系
子类构造器和父类构造器紧密相连,就像孩子与父母的关系一样。子类构造器在初始化对象时,默认会先调用父类的构造器,确保父类部分的属性和行为得到正确的初始化。这是因为子类是基于父类扩展而来的,只有父类的基础打好了,子类才能在这个基础上进行进一步的构建。
二、子类构造器的调用规则
(一)默认调用父类无参构造器
当我们在子类中没有显式地调用父类的构造器时,Java 编译器会自动在子类构造器的第一行插入对父类无参构造器的调用,就像下面这样:
class Parent {public Parent() {System.out.println("父类无参构造器被调用");}
}class Child extends Parent {public Child() {// 这里编译器会自动添加 super(); 来调用父类无参构造器System.out.println("子类无参构造器被调用");}
}public class ConstructorExample1 {public static void main(String[] args) {Child child = new Child();}
}
在这个例子中,当创建 Child
类的对象时,首先会输出 “父类无参构造器被调用”,然后才输出 “子类无参构造器被调用”,这就证明了子类构造器默认会先调用父类无参构造器。
是不是很简单呢?包子。
(二)显式调用父类构造器
如果父类没有无参构造器,或者我们想要调用父类的有参构造器来初始化父类的特定属性,就需要在子类构造器中显式地使用 super
关键字来调用父类的构造器,而且 super
调用必须放在子类构造器的第一行,否则会报错。例如:
class ParentWithArgs {private int num;public ParentWithArgs(int num) {this.num = num;System.out.println("父类有参构造器被调用,num = " + num);}
}class ChildWithArgs extends ParentWithArgs {public ChildWithArgs(int num) {// 显式调用父类有参构造器super(num);System.out.println("子类构造器被调用");}
}public class ConstructorExample2 {public static void main(String[] args) {ChildWithArgs child = new ChildWithArgs(5);}
}
在这个例子中,
ChildWithArgs
类的构造器通过super(num)
显式地调用了父类ParentWithArgs
的有参构造器,确保父类的num
属性得到正确的初始化,然后再执行子类构造器中的代码。
(三)构造器链的形成
当存在多层继承关系时,就会形成构造器链。比如说,有一个爷爷类 Grandparent
,一个父类 Parent
继承自 Grandparent
,一个子类 Child
继承自 Parent
。在创建 Child
类的对象时,首先会调用 Grandparent
的构造器,然后是 Parent
的构造器,最后才是 Child
的构造器,就像一条链条一样,一环扣一环,保证了整个继承体系中对象的正确初始化。
class Grandparent {public Grandparent() {System.out.println("爷爷类构造器被调用");}
}class Parent extends Grandparent {public Parent() {System.out.println("父类构造器被调用");}
}class Child extends Parent {public Child() {System.out.println("子类构造器被调用");}
}public class ConstructorChainExample {public static void main(String[] args) {Child child = new Child();}
}
在这个例子中,创建 Child
类对象时,会依次输出 “爷爷类构造器被调用”、“父类构造器被调用” 和 “子类构造器被调用”,清晰地展示了构造器链的执行过程。
三、子类构造器中的初始化顺序
(一)先初始化父类成员,再初始化子类成员
在子类构造器执行过程中,首先会按照父类构造器的初始化逻辑来初始化父类的成员变量,然后才会执行子类构造器中对子类成员变量的初始化操作。这是因为子类对象的内存空间中包含了父类的部分,只有先确保父类部分的完整性,才能正确地初始化子类的扩展部分。比如嘛:
class ParentMember {private int parentNum;public ParentMember() {parentNum = 10;System.out.println("父类成员变量初始化,parentNum = " + parentNum);} }class ChildMember extends ParentMember {private int childNum;public ChildMember() {childNum = 20;System.out.println("子类成员变量初始化,childNum = " + childNum);} }public class InitializationOrderExample {public static void main(String[] args) {ChildMember child = new ChildMember();} }
在这个例子中,创建 ChildMember
类对象时,先输出 “父类成员变量初始化,parentNum = 10”,然后才输出 “子类成员变量初始化,childNum = 20”,这表明了成员变量的初始化顺序是先父类后子类。
(二)静态成员的初始化时机
静态成员变量和静态代码块的初始化与实例成员的初始化有所不同。静态成员在类加载时就会被初始化,而且只会初始化一次,无论创建多少个该类的对象。对于子类来说,父类的静态成员会先于子类的静态成员初始化,遵循类加载的顺序。例如:
class ParentStatic {public static int parentStaticNum;static {parentStaticNum = 5;System.out.println("父类静态成员初始化,parentStaticNum = " + parentStaticNum);}
}class ChildStatic extends ParentStatic {public static int childStaticNum;static {childStaticNum = 8;System.out.println("子类静态成员初始化,childStaticNum = " + childStaticNum);}
}public class StaticInitializationExample {public static void main(String[] args) {// 这里只是为了触发类加载,即使不创建对象,静态成员也会初始化System.out.println("父类静态成员:" + ParentStatic.parentStaticNum);System.out.println("子类静态成员:" + ChildStatic.childStaticNum);}
}
这个例子中,当运行 main
方法时,首先会输出 “父类静态成员初始化,parentStaticNum = 5”,然后输出 “子类静态成员初始化,childStaticNum = 8”,这说明静态成员的初始化是按照类的层次结构,从父类到子类依次进行的,并且与对象的创建无关。
四、子类构造器与方法重写的关系
(一)构造器中调用可重写方法的风险
在子类构造器中调用可重写的方法是一种危险的行为,可能会导致意想不到的结果。因为在子类构造器执行时,子类的对象还没有完全初始化完成,但此时如果调用了可重写的方法,而这个方法又依赖于子类中尚未初始化的成员变量,就可能会出现空指针异常或其他错误的行为。例如:
class ParentMethod {public ParentMethod() {// 在父类构造器中调用可重写方法someMethod();}public void someMethod() {System.out.println("父类的 someMethod 被调用");}
}class ChildMethod extends ParentMethod {private String message;public ChildMethod() {message = "Hello";}@Overridepublic void someMethod() {// 这里试图访问尚未初始化的 message 成员变量,会导致空指针异常System.out.println("子类的 someMethod 被调用,message = " + message);}
}public class ConstructorAndOverrideExample {public static void main(String[] args) {try {ChildMethod child = new ChildMethod();} catch (Exception e) {e.printStackTrace();}}
}
在这个例子中,创建 ChildMethod
类对象时,会在父类构造器调用 someMethod
方法时,由于子类的 message
成员变量还未初始化,导致空指针异常。所以,一般情况下,应该避免在子类构造器中调用可重写的方法。
(二)正确的使用方式
宝子,这里如果确实需要在子类构造器中执行一些与父类相关但又需要子类特定实现的逻辑,可以将这些逻辑封装在一个非重写的方法中,然后在子类构造器和其他合适的地方调用这个方法,这样可以保证在对象完全初始化后再执行这些逻辑,避免出现问题。例如:
class ParentSafe {public ParentSafe() {// 调用一个非重写的初始化方法safeInitialization();}protected void safeInitialization() {System.out.println("父类的安全初始化方法被调用");}
}class ChildSafe extends ParentSafe {private String data;public ChildSafe() {data = "World";}@Overrideprotected void safeInitialization() {// 在这里可以安全地使用子类的成员变量System.out.println("子类的安全初始化方法被调用,data = " + data);}
}public class SafeConstructorExample {public static void main(String[] args) {ChildSafe child = new ChildSafe();}
}
在这个修改后的例子中,ParentSafe
类提供了一个非重写的 safeInitialization
方法,子类 ChildSafe
重写了这个方法,并在构造器中先完成成员变量的初始化,然后再调用 safeInitialization
方法,这样就可以安全地执行子类特定的初始化逻辑,避免了前面提到的风险。
五、子类构造器在实际开发中的应用场景
(一)图形绘制系统中的子类构造器
在一个图形绘制系统中,如前所述,有一个父类 Shape
,它可能包含颜色、位置等通用属性和绘制的基本方法。子类 Circle
继承自 Shape
,它的构造器除了调用父类构造器初始化颜色和位置外,还需要接收圆的半径作为参数,并初始化这个特定属性。例如:
import java.awt.Color;class Shape {protected Color color;protected int x;protected int y;public Shape(Color color, int x, int y) {this.color = color;this.x = x;this.y = y;}public void draw() {System.out.println("绘制一个基本形状");}
}class Circle extends Shape {private int radius;public Circle(Color color, int x, int y, int radius) {super(color, x, y);this.radius = radius;}@Overridepublic void draw() {System.out.println("绘制一个圆形,半径为 " + radius + ",颜色为 " + color);}
}public class GraphicsExample {public static void main(String[] args) {Circle circle = new Circle(Color.RED, 10, 20, 5);circle.draw();}
}
在这个例子中,Circle
类的构造器通过 super
关键字调用父类 Shape
的构造器来初始化颜色和位置,然后再初始化自己的半径属性,这样在绘制圆形时,就能正确地显示出圆形的所有属性。
(二)游戏角色创建中的子类构造器
在游戏开发中,假设有一个父类 Character
,它定义了角色的基本属性,如生命值、攻击力等,以及一些通用的行为方法,如移动、攻击等。子类 Warrior
(战士)和 Mage
(法师)继承自 Character
,它们的构造器可以根据各自的特点初始化不同的属性,比如战士可能有更高的生命值和近战攻击力,法师可能有更高的魔法攻击力和魔法值。例如:
class Character {protected int health;protected int attackPower;public Character(int health, int attackPower) {this.health = health;this.attackPower = attackPower;}public void move() {System.out.println("角色移动");}public void attack() {System.out.println("角色攻击,攻击力为 " + attackPower);}
}class Warrior extends Character {private int defense;public Warrior(int health, int attackPower, int defense) {super(health, attackPower);this.defense = defense;}@Overridepublic void attack() {System.out.println("战士强力攻击,攻击力为 " + attackPower);}public void defend() {System.out.println("战士防御,防御力为 " + defense);}
}class Mage extends Character {private int magicPower;public Mage(int health, int attackPower, int magicPower) {super(health, attackPower);this.magicPower = magicPower;}@Overridepublic void attack() {System.out.println("法师魔法攻击,魔法攻击力为 " + magicPower);}public void castSpell() {System.out.println("法师释放魔法");}
}public class GameCharacterExample {public static void main(String[] args) {Warrior warrior = new Warrior(100, 20, 15);Mage mage = new Mage(80, 10, 30);warrior.move();warrior.attack();warrior.defend();mage.move();mage.attack();mage.castSpell();}
}
在这个游戏角色创建的例子中,Warrior
和 Mage
子类的构造器通过调用父类构造器初始化基本属性,并根据自身特点初始化额外的属性,如战士的防御力和法师的魔法攻击力,从而创建出具有不同特性的游戏角色,丰富了游戏的玩法和体验。
宝子们,Java 子类构造器的这些特点虽然看起来有点复杂,但只要我们深入理解并在实际开发中正确运用,就能更好地构建出高质量、健壮且易于维护的 Java 代码。希望通过这篇文章,大家对子类构造器有了更清晰、更全面的认识。如果在学习过程中还有什么疑问或者想要进一步探讨的地方,随时回来看看这篇文章,或者查阅更多的相关资料哦。
举一些子类构造器的代码示例
子类构造器和父类构造器的执行顺序是怎样的?
子类构造器可以调用父类的构造器吗?
这些都可以搜索的,文章如果不能帮到你,那是正常滴,你一定要找其他的文章,坚持学习下去,相信你一定可以的。
相关文章:
【潜意识Java】探寻Java子类构造器的神秘面纱与独特魅力,深度学习子类构造器特点
目录 一、子类构造器的诞生背景 (一)为啥要有子类构造器? (二)子类与父类构造器的关系 二、子类构造器的调用规则 (一)默认调用父类无参构造器 (二)显式调用父类构…...
OpenCV调整图像亮度和对比度
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、基本方法---线性变换 // 亮度和对比度调整 cv::Mat adjustBrightnessContrast(const cv::Mat& src, double alpha, int beta) {cv::Mat dst;src.convertTo(dst, -1, alpha, beta);return dst; }// 使用…...
HarmonyOs DevEco studio小技巧40--应用名称、图标与启动动画修改全攻略
一、引言 随着 HarmonyOS 的日益普及,越来越多的开发者投身于这个充满潜力的生态之中。而 DevEco Studio 作为 HarmonyOS 官方推出的集成开发环境,为开发者提供了一站式的开发体验。在应用开发过程中,一些细节上的设置,如应用名称…...
ESP-IDF学习记录(2)ESP-IDF 扩展的简单使用
傻瓜式记录一个示例的打开,编译,运行。后面我再一个个运行简单分析每个demo的内容。 1.打开示例代码 2.选择项目,文件夹 3.选择串口 4.选择调试方式 5.根据硬件GPIO口配置menuconfig 6.构建项目 7.烧录设备,选择串口UART方式 运行…...
2024 年最新 windows 操作系统搭建部署 nginx 服务器应用详细教程(更新中)
nginx 服务器概述 Nginx 是一款高性能的 HTTP 和 反向代理 服务器,同时是一个 IMAP / POP3 / SMTP 代理服务器。Nginx 凭借其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 浏览 nginx 官网:https://nginx.org/ Nginx 应用场景 静态…...
基于ArcGIS Pro的SWAT模型在流域水循环、水生态模拟中的应用及案例分析;SWAT模型安装、运行到结果读取全流程指导
目前,流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型,能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…...
Quartz任务调度框架实现任务动态执行
说明:之前使用Quartz,都是写好Job,指定一个时间点,到点执行。最近有个需求,需要根据前端用户设置的时间点去执行,也就是说任务执行的时间点是动态变化的。本文介绍如何用Quartz任务调度框架实现任务动态执行…...
10.MySQL事务
目录 什么是事务为什么有事务存在事务的版本支持事务的提交方式事务常见的操作方式事务异常验证与产出结论事务隔离性理论事务隔离级别的设置与查看事务隔离级别 - 读未提交事务隔离级别 - 读提交事务隔离级别 - 可重复读事务隔离级别 - 串行化MVCC机制3个记录隐藏字段undo日志…...
1.若依介绍
若依框架 好处: 1.快速构建 2.通用模块(登录、权限分配和校验、操作日志功能) 3.代码生成(定义好数据库表的结构,就能自动生成前后端对应的代码) 位置:系统工具-> 代码生成 若依版本 R…...
计算机网络实验室建设方案
一、计算机网络实验室拓扑结构 计算机网络综合实验室解决方案,是面向高校网络相关专业开展教学实训的综合实训基地解决方案。教学实训系统采用 B/S架构,通过公有云教学实训平台在线学习模式,轻松实现网络系统建设与运维技术的教学…...
【Rust自学】6.4. 简单的控制流-if let
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 6.4.1. 什么是if let if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值,同时忽略其余模式。 可以…...
4-1 输出一组成绩中的最高分和最低分
第一行输入人数n,第二行输入每个人的成绩,用空格分开。输出所有成绩中的最高分和最低分。 输入格式: 第一行输入n,大于0的整数;第二行输入n个大于等于0,小于等于100的整数,用空格分开。 输出格式: 最高…...
数据结构:二叉树部分接口(链式)
目录 二叉树的遍历 1.通过前序遍历的数据构造二叉树 2.二叉树销毁 3. 二叉树节点个数 4. 二叉树叶子节点的个数 5.二叉树第k层节点个数 6.二叉树查找值为x的节点 7.二叉树的前/中/后序遍历 8.层序遍历 9.判断二叉树是否是完全二叉树 二叉树的遍历 前序、中序以及后序…...
音视频入门基础:MPEG2-PS专题(1)——MPEG2-PS官方文档下载
一、引言 MPEG2-PS(又称PS,Program Stream,程序流,节目流)是一种多路复用数字音频、视频等的封装容器。MPEG2-PS将一个或多个分组但有共同的时间基准的基本数据流 (PES)合并成一个整体流。它是…...
overleaf中文生僻字显示不正确,显示双线F
我是不想换全文字体的,只是一个生僻字显示不出来,就想要像word一样,把这个生僻字用包含这个生僻字的字体来显示就好了。 解决步骤: 1、使用如下宏包: \usepackage{xeCJK} %声明宏包,主要用于支持在XeTeX…...
代理arp(proxy arp)原理 及配置
openwrt下打开 arp代理方法 proxy arp概念打开方法openwrt下打开 arp代理方法proxy arp概念 定义 Proxy ARP(代理地址解析协议)是一种网络技术,它允许一个设备(通常是路由器)代表另一个设备来回应 ARP(地址解析协议)请求。工作原理 ARP 回顾:在正常的 ARP 过程中,当主…...
torch.tensor
torch.tensor 通过复制数据构造一个张量 (构造出的张量是一个没有自动微分(autograd )历史的张量,也称为叶张量,参考Autograd mechanics)。 torch.tensor(data, *, dtypeNone, deviceNone, requires_gra…...
Lucene 漏洞历险记:修复损坏的索引异常
作者:来自 Elastic Benjamin Trent 有时,一行代码需要几天的时间才能写完。在这里,我们可以看到工程师在多日内调试代码以修复潜在的 Apache Lucene 索引损坏的痛苦。 做好准备 这篇博客与往常不同。它不是对新功能或教程的解释。这是关于花…...
Github优质项目推荐(第十期)
文章目录 Github优质项目推荐(第十期)一、【postiz-app】,14.6k stars - 您的终极 AI 社交媒体调度工具二、【lobe-chat】,50.1k stars - AI 聊天框架三、【cobalt】,22.1k stars - 媒体下载器四、【build-your-own-x】…...
【已解决】“Content-Security-Policy”头缺失
1、作用 简称CSP,意为内容安全策略,通过设置约束指定可信的内容来源,降低异源文件攻击,例如:js/css/image等 2、相关设置值 指令名 demo 说明 default-src self cdn.example.com 默认策略,可以应用于js文件/图片…...
【每日学点鸿蒙知识】Web高度适配、变量声明规范、动画取消、签名文件、包体积优化相关
1、HarmonyOS Web页面高度适配? 在Web页面设置高度100%时,发现和Web控件的高度不一致,这个需要设置什么可以达到页面高度和Web容器高度一致 目前只支持两种web布局模式,分别为Web布局跟随系统WebLayoutMode.NONE和Web基于页面大…...
呼叫中心中间件免费体验测试和freeswitch部署方案
文章目录 前言联系我们部署freeswitch常见问题汇总 前言 大部分的用户想体验呼叫中心中间件的功能,却没有门路。这里可以分享呼叫中心中间件的部署链接,可供用户们免费体验测试。 联系我们 有意向了解呼叫中心中间件的用户,点击该链接可添加…...
游戏开发线性空间下PS工作流程
前言 使用基于物理的渲染,为了保证光照计算的准确,需要使用线性空间; 使用线性空间会带来一个问题,ui 在游戏引擎中的渲染结果与 PS 中的不一致: PS(颜色空间默认是sRGB伽马空间):…...
Mono里运行C#脚本7—MonoImageStorage结构解析
Mono里运行C#脚本7—MonoImageStorage结构解析 定义一个结构来保存EXE文件加载到内存的表示。 typedef struct { MonoRefCount ref; //引用计数,如果这个文件引用计数为0就可以删除。 /* key used for lookups. owned by this image storage. */ char *key; //HASH…...
Mac 查询IP配置,网络代理
常用命令 1.查询IP ifconfig | grep "inet" 2.ping查询 ping 172.18.54.19(自己IP) 3.取消代理,通过在终端执行以下命令,可以取消 Git 的代理设置 git config --global --unset http.proxy git config --global …...
WebRTC 环境搭建
主题 本文主要描述webrtc开发过程中所需的环境搭建 环境: 运行环境:ubuntu20.04 Node.js环境搭建 安装编译 Node.js 所需的依赖包: sudo apt-get updatesudo apt-get install -y build-essential libssl-dev下载 Node.js 源码: curl -sL https://…...
Pytorch | 利用DTA针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用DTA针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集DTA介绍算法流程 DTA代码实现DTA算法实现攻击效果 代码汇总dta.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行分类 Pytorch | 从零构建…...
基于STM32的智能路灯系统控制的Proteus仿真
文章目录 一、智能路灯系统控制1.题目要求2.思路3.电路仿真3.1 未仿真3.2 开始仿真,显示屏显示初始化连接界面后,转为正常显示界面3.3 按下模式按键,切换为AUTO1模式3.4 再次按下模式按键,切换为HAND模式3.5 切换为时间设置界面&a…...
Kivy App开发遇到的问题
Python的安装 如图示,不要安装在带空格的路径下,Program Files 错误,后面安装kivy部件时导致找不到路径, 只能卸载重装. Python重装后将之前kivy的安装拷贝到新的目录下,不用重新安装 安装kivy,kivy的库都会安装在python的目录下,所以kivy项目设置编译器指向python 安装…...
如何在 ONLYOFFICE 中使用智谱 AI 人工智能插件以及其它实用插件来写文章
如何在 ONLYOFFICE 中使用智谱 AI 人工智能插件以及其它实用插件来写文章 书接上文: 为什么 F-35 拥有更大推力的引擎,只能达到 1.6 马赫速度,然而 F-16 却能达到 2.0 马赫? 这一片其实是我和人工智能一起合写的东西࿰…...
Clickhouse使用基础
# 查看操作系统版本 cat /etc/os-release# clickhouse版本 clickhouse -V# 登录clickhouse客户端 clickhouse-client -u xxx --password xxx -m # -m 或 --multiline:进入客户端后,运行输入多行sql语句建表 # 创建数据库 CREATE DATABASE IF NOT EXIST…...
Docker基础知识 Docker命令、镜像、容器、数据卷、自定义镜像、使用Docker部署Java应用、部署前端代码、DockerCompose一键部署
目录 1.Docker 2.镜像和容器 2.1 定义 2.2 开机自动启动容器 3.docker命令 3.1 docker run 参数说明 3.2 常见命令 3.3 命令演示 3.4 命令别名 4.Docker命令详解 5.数据卷 5.1 定义 5.2 数据卷的相关命令 5.3 数据卷命令 5.4 挂载本地目录或文件 5.4.1 定义 5.4.2 mysql容器目录…...
b站ip属地评论和主页不一样怎么回事
在浏览B站时,细心的用户可能会发现一个有趣的现象:某些用户的评论IP属地与主页显示的IP属地并不一致。这种差异引发了用户的好奇和猜测,究竟是什么原因导致了这种情况的发生呢?本文将对此进行深入解析,帮助大家揭开这一…...
【最新】沃德协会管理系统源码+uniapp前端+环境教程
一.系统介绍 一款基于FastAdminThinkPHPUniapp开发的商协会系统,新一代数字化商协会运营管理系统,以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点,实施功能全场景覆盖,一站式解决商协会需求壁垒࿰…...
Cookie+Redis+自定义参数解析器+AOP+自定义校验注解实现鉴权+改动CustomException
文章目录 1.数据库表设计2.基础环境搭建1.目录2.MD5Util.java 加密加盐工具类3.CookieUtil.java4.其余的都是使用EasyCode自动生成的,不再赘述5.测试是否可以访问 3.用户注册1.LoginUserController.java2.UserConstant.java 用户常量3.LoginUserReq.java 请求4.Logi…...
低代码开发 实战转型案例一览
数字浪潮澎湃,企业应用开发需求呈井喷之势。传统全栈开发虽底蕴深厚,然其漫长周期与高昂成本,难以追赶市场快速交付的急切步伐。无代码与低代码平台顺势崛起,宛如暗夜明灯,吸引非技术人员纷至沓来,投身应用…...
Spring Boot实战:构建一个简单的RESTful API
Spring Boot是一个开源框架,旨在简化Spring应用的创建与开发过程。通过Spring Boot,你可以轻松地创建独立、生产级的Spring应用,而不需要复杂的配置。本教程将带领大家一步一步构建一个简单的RESTful API,演示Spring Boot的核心功…...
电力场景配网缺陷系列之销钉缺失检测数据集VOC+YOLO格式3095张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3095 标注数量(xml文件个数):3095 标注数量(txt文件个数):3095 …...
FastAPI中的数据库应用介绍
FastAPI中的数据库应用介绍 FastAPI 是一个高性能和易用的日现应用框架,在构建数据库操作时同样具备高效性和完善性。本文将分为初级和高级应用,帮助你熟练从基础到高级的数据库操作。 一、初级应用 1.安装和配置 FastAPI 通常搭配 ORM 工具来操作数据…...
wordpres当前分类调用父分类的名称和链接
在WordPress中,如果你想在当前分类页面调用并显示父分类的名称和链接,你可以使用以下代码片段: <?php // 获取当前分类的ID $cat_id get_queried_object_id();// 获取当前分类的父分类ID $parent_id get_term($cat_id, category)->…...
自动驾驶3D目标检测综述(六)
停更了好久终于回来了(其实是因为博主去备考期末了hh) 这一篇接着(五)的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 (一)…...
RDFS—RDF模型属性扩展解析
目录 前言1. 什么是RDFS?1.1 RDFS的核心概念1.2 RDFS与RDF的区别 2. RDFS的基础概念2.1 类(Class)2.2 属性(Property)2.3 关系(Relation)2.4 定义域(Domain)2.5 值域&…...
应用层2——FTP文件传输协议
FTP文件传输协议 FTP文件传输协议 TFTP简单文件传输协议 提供不同种类主机系统(软硬件体系不同)之间的文件传输能力 即屏蔽底层操作系统的差异 FTP以C/S模式进行服务,FTP使用TCP协议传输 FTP服务器进程: 一个主进程,n个从属进…...
《探索PyTorch计算机视觉:原理、应用与实践》
《探索PyTorch计算机视觉:原理、应用与实践》 一、PyTorch 与计算机视觉的奇妙相遇二、核心概念解析(一)张量:计算机视觉的数据基石(二)神经网络:视觉任务的智慧大脑(三)…...
【Linux学习五】时间日期指令与查找指令
目录 一、时间日期指令 1.1 显示日期 1.2 设置日期 1.3 日历指令 二、搜索查找类指令 2.1 find指令 2.2 locate指令 2.3 grep指令和管道符号| 一、时间日期指令 1.1 显示日期 date (功能描述:显示当前时间)date %Y࿰…...
程序环境和预处理
程序环境和预处理 1.程序环境1.1如何从test.c到test.exe1.2.翻译环境1.2.1翻译过程1.2.2详细过程 1.3.运行环境 2.预处理2.1 预定义符号2.2 define2.2.1 define定义标识符2.2.2 define定义宏2.2.3 带副作用的宏参数2.2.4 宏和函数的对比 2.3 #undef2.4 命令行定义2.5 条件编译2…...
SpringCloud整合skywalking实现链路追踪和日志采集
1.部署skywalking https://blog.csdn.net/qq_40942490/article/details/144701194 2.添加依赖 <!-- 日志采集 --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version&g…...
【Java】面试题 并发安全 (2)
文章目录 可重入锁(ReentrantLock)知识总结1. 可重入锁概念与特点2. 基本语法与使用注意事项3. 底层实现原理4. 面试回答要点 synchronized与lock的区别死锁相关面试题讲解死锁产生的四个条件ConcurrentHashMap2. JDK1.7的ConcurrentHashMap结构添加数据…...
面试场景题系列:设计URL短链
1.场景需求界定 1.缩短URL:提供一个长URL,返回一个短很多的URL。 2.重定向URL:提供一个缩短了的URL,重定向到原URL。 3.高可用、可扩展性和容错性考量。 •写操作:每天生成1亿个URL。 •每秒的写操作数:…...
C++模版
一.函数模版 1.定义:用来产生一组重组的函数,这些函数具有共同的逻辑和操作步骤,但其输入和输出的数据类型可以不一样 2.模版的语法形式 3.例子: template<typename T> T maximum(T value1, T value2, T value3) {T maxi…...