java面向对象编程【基础篇】之基础语法
目录
- 🚀前言
- 🌟构造器
- 💯案例
- 🤔this关键字
- 💯使用this调用本类中的属性
- 💯使用this调用构造器
- 💯this表示当前对象
- 🦜封装
- 💯合理隐藏
- 💯合理暴露
- 🐧实体类
- 🐍static关键字
- 💯static修饰成员变量
- 💯static修饰方法
- 💯static的应用场景
- 💯静态方法的注意事项
🚀前言
大家好!我是 EnigmaCoder。
- 本文介绍java面向对象编程的简单语法,如构造器、this关键字、封装、实体类、static关键字等。
🌟构造器
构造器:是一种特殊的方法,不能有返回值,而且和类名相同,用于初始化对象。
- 特点:创建对象时,对象会自动调用构造器(根据有无参数)。
- 构造器分为无参构造器和有参构造器:
无参构造器:访问权限 类名(){//类自带无参构造器,如果自己写有参构造器,那么类自带的无参构造器就失效了,此时需要自己加上无参构造器。}有参构造器:访问权限 类名(类型1 参数1,类型2 参数2 ...){程序语句;}
- 三点注意事项:
- 构造器的名称必须与类名称一致。
- 构造器的声明处不能有任何返回值类型的声明。
- 不能在构造器中使用
return
返回一个值。
💯案例
- Student类
public class Student {String name;int age;char sex;public Student(){System.out.println("无参构造器");}public Student(String name,int age){System.out.println("有参构造器");}public Student(String n,int a,char s){name = n;age = a;sex = s;}
}
- Test类
public class Test {public static void main(String[] args) {Student s1 = new Student();Student s2 = new Student("张三",18);Student s3 = new Student("李四",20,'男');System.out.println(s3.name);System.out.println(s3.age);System.out.println(s3.sex);}
}
- 运行结果
无参构造器
有参构造器
李四
20
男
- 小结
对象
s1
在创建时未加上参数,所以调用无参构造器;对象s2
在创建时加上了参数,则调用拥有相对应的参数列表的有参构造器;对象s3
则反映了有参构造器的应用场景,即创造对象时可以立即为对象赋值,可以提高开发效率。
🤔this关键字
this
关键字有三个作用:
- 表示类中的属性。
- 可以使用
this
调用本类的构造器。 this
表示当前对象。
💯使用this调用本类中的属性
- 例如在上述Student类中,我们使用了有参构造器:
public Student(String n,int a,char s){name = n;age = a;sex = s;}
该构造器的目标很明确,即为类中的属性赋值,但是,如果不分析前后代码,我们很难知道
n、a、s
分别表示什么含义,进而无法进行准确的赋值。
- 为此,我们修改代码:
public Student(String name,int age,char sex){name = name;age = age;sex = sex;}
我们会发现运行结果为:
null
0
显然不是我们想要的结果,这是因为无法确定
name、age、sex
是类的属性还是构造器的参数。事实上,根据就近原则,两边都是传递的参数。
- 我们可以使用this关键字来解决这个问题,修改后的代码为:
public Student(String name,int age,char sex){this.name = name;this.age = age;this.sex = sex;}
this
可以表示类中的属性,所以等号左边是类的属性,右边是传递进来的值,此时可以成功的将传递进来的值赋值给类中的属性。在开发中,建议在类中访问属性时都加上this
关键字。
💯使用this调用构造器
- 假设我们的需求是每一次调用有参构造器之前先调用一次无参构造器,代码如下:
public class Student {String name;int age;char sex;public Student(){System.out.println("无参构造器");}public Student(String name,int age){System.out.println("有参构造器");}public Student(String name,int age,char sex){this();name = name;age = age;sex = sex;}
}
- 使用上述的Test类调用Student类,运行结果为:
无参构造器
有参构造器
无参构造器
李四
20
男
- 显然,拥有三个参数的构造器使用
this();
的形式调用了本类中的无参构造器。即this
关键字可以调用本类中的其它构造器,例如,我们改变需求先调用有两个参数的构造器,可以使用this(name,age);
来完成。- 注意:(1)使用
this
关键字时只能放在构造器的首行,否则报错。(2)禁止互相调用,使用this
进行构造器调用时必须要有一个构造器作为出口,即程序中至少存在一个构造器是不使用this
的,一般以无参构造器为出口。
💯this表示当前对象
- 观察
this
表示当前对象:
class Person{public String getInfo(){System.out.println("Person类 -->"+this); //直接打印thisreturn null; //此处返回null,为了让语法不出错}
}public Test{public static void main(String[] args) {Person per1=new Person();Person per2=new Person();System.out.println("MAIN方法 -->"+per1);per1.getInfo();System.out.println("-------------------";System.out.println("MAIN方法 -->"+per2);per2.getInfo();}
}
- 运行结果:
MAIN方法 -->Person@757aefPerson类 -->Person@757aef-------------------MAIN方法 -->Person@d9f9c3Person类 -->Person@d9f9c3
从运行结果来看,直接打印对象和调用
getInfo()
方法打印的结果一样,而且在getInfo()
方法中永远是一个this
关键字,也就是说哪个对象调用了类中的方法,则this
就表示哪个对象。
🦜封装
- 封装是java面向对象编程的三大特性之一,其设计思想在于合理隐藏合理暴露。
- 封装机制为封装在一个整体的变量及方法规定了不同级别的“
可见性
”或访问权限,以保证外界不能随意更改其内部的属性值,也不能任意调用其内部的功能方法。
💯合理隐藏
- 观察一下程序的问题:
class Student{String name;int age;public void tell(){System.out.println("姓名:"+name+",年龄:"+age);}public class Test{public static void main(String[] args) {Student per=new Student();per.name="张三";per.age="-18";per.tell();}}
}
运行结果如下:
姓名:张三,年龄:-18
我们发现,在程序中将年龄(
age
)赋值为-18
岁,这在程序上没有问题,但对于用户而言,这显然是一个不合法的数据。这是因为程序中用对象直接访问类中的属性,这在面向对象法则中是不允许的。为了避免这样的事发生,在一般的开发中往往要将类中的属性封装。
- 封装格式如下:
为属性封装:private 属性类型 属性名称;为方法封装:private 方法返回值 方法名称(参数列表){}
对上面的
Student
类进行封装,我们会发现运行报错,这是因为我们只进行了合理隐藏,但没有进行合理暴露。
💯合理暴露
使用public
修饰(公开)的get
和set
方法合理暴露。
- 只要是被封装的属性,则必须通过
setter
和getter
设置和取得。
class Student{private String name;private int age;Public void tell(){System.out.println("姓名:"+this.getName+",年龄:"+this.getAge);}public void setName(String name){this.name=name;}public String getName(){return name;}public void setAge(int age){if(age>=0&&age<=150)this.age=age;}public int getAge(){return age;}
}
public class Test{public static void main(String[] args) {Student per=new Student();per.getName="张三";per.getAge="-18";per.tell();}
}
- 运行结果为:
姓名:张三,年龄:0
经过封装后,可以在
setter()
方法处加上验证代码,如果是不合法的数据,则不会将值赋值给age
属性。
🐧实体类
实体类是一种特殊的类,其满足一下两个需求:
- 类中的成员变量全部私有,并提供
public
修饰的getter/setter
方法。 - 类中需要提供一个无参构造器,有参构造器可选。
- 这里介绍IDEA的生成功能:
第一步:点击右键
第二步:点击Generate
(生成)
第三步:点击需要自动生成的功能,然后全选,再点OK
即可。
🐍static关键字
💯static修饰成员变量
成员变量按照有无static修饰,分为两种:
- 静态变量(类变量):有
static
修饰,属于类,在计算机里只有一份,会被类的全部对象共享。 - 实例变量(对象的变量):无
static
修饰,属于每个对象的。
访问格式:
- 静态变量的访问:
类名.静态变量(推荐)
对象.静态变量
- 实例变量的访问:
对象.实例变量
- Student类:
public class Student {// 静态变量:属于类,只加载一次,可以被类和类的所有对象共享static String name;//实例变量:属于对象,每个对象都有一份int age;}
- Test类:
public class Test {public static void main(String[] args) {//1.类名.静态成员变量名=值;(推荐)Student.name="王二狗";//2.对象名.静态成员变量名=值;Student s1=new Student();s1.name="张三";Student s2=new Student();s2.name="李小花";System.out.println(Student.name);//以最后一次为准System.out.println(s1.name);//3.对象名.实例变量=值;s1.age=18;s2.age=19;System.out.println(s1.age);System.out.println(s2.age);}
}
- 运行结果为:
李小花
李小花
18
19
由于
name
是静态变量,可以被类和类的所有对象共享,所以无论是用对象名还是用类名调用,都以最后一次赋值为准。而age
为实例变量,其为对象所有,每个对象的访问相互不影响。
💯static修饰方法
static
修饰方法的分类、访问与static
修饰成员变量基本相同。
- Student类:
public class Student {private double score;//静态方法:有static修饰,属于类持有public static void printHelloWorld(){System.out.println("Hello World");}//实例方法:没有static修饰,属于对象持有public void printPass(){System.out.println(score>=60?"通过":"不通过");}public void setScore(double score) {this.score = score;}
}
- Test类:
public class Test {public static void main(String[] args) {//1.类名.静态方法(推荐)Student.printHelloWorld();//2.对象.静态方法Student S1 = new Student();S1.printHelloWorld();//3.对象.实例方法Student s2 = new Student();s2.setScore(100);s2.printPass();}
}
- 运行结果:
Hello World
Hello World
通过
如果这个方法只是为了做一个功能且不需要直接访问对象,那么这个方法可以使用静态方法。反之, 如果这个方法是对象的行为,需要访问对象的数据,那么这个方法必须使用实例方法。
💯static的应用场景
- 修饰成员变量:
如果某个数据需要一份,并且希望能够被共享(访问、修改),则该数据可以被定义成静态变量来记住。例如,统计一个类产生了多少个对象。
public class Uesr {public static int count;public Uesr(){count++;//每创建一个对象,count就加1}public static void main(String[] args) {new Uesr();new Uesr();new Uesr();System.out.println(Uesr.count);}
}
- 修饰方法:
可以用来做工具类。工具类中的方法都是一些静态方法,每个方法用来完成一个功能,以便供给开发人员直接使用。这样提高了代码复用和开发效率。工具类没有创建对象的需求,建议将工具类的构造器私有。
💯静态方法的注意事项
- 静态方法中可以直接访问静态成员,但不能直接访问实例成员。
- 实例方法中既可以直接访问静态成员,也能直接访问实例成员。
- 实例方法中可以出现
this
关键字,静态方法中则不能出现。
前文提到,静态方法由类持有,属于类,不属于任何对象,其直接访问实例成员,无法确定实例成员为哪个对象持有,而
this
关键字表示的也是对象,所以同样不支持。
相关文章:
java面向对象编程【基础篇】之基础语法
目录 🚀前言🌟构造器💯案例 🤔this关键字💯使用this调用本类中的属性💯使用this调用构造器💯this表示当前对象 🦜封装💯合理隐藏💯合理暴露 🐧实体…...
跑MPS产生委外采购申请(成品)
问题:跑MPS产生委外采购申请(成品),更改BOM和跑MRP,但物料需求清单中无新增物料复合膜的需求。截图如下: 解决方法:更改委外采购申请的批准日期为BOM的生效日和重新展开bom。 重新展开后&#x…...
[flutter]切换国内源(window)
如题,切换到国内源避免总是连不上google导致卡住的问题。 临时切换到国内: cmd set PUB_HOSTED_URLhttps://pub.flutter-io.cn set FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cnpower shell $env:PUB_HOSTED_URL "https://pub.flut…...
学习海康VisionMaster之顶点检测
一:进一步学习了 今天学习下VisionMaster中的顶点检测:可检测图像指定区域内的顶点,并输出顶点坐标等信息。该模块常用于检测目标物体的顶点 二:开始学习 1:什么是顶点检测? 一个不是很规则的物体需要检测…...
Vue2中常用的核心函数(选项和生命周期钩子)的完整示例及总结
以下是Vue2中常用的核心函数(选项和生命周期钩子)的完整示例及总结: 1. 实例选项函数 data 初始化组件数据 new Vue({el: #app,data() {return {message: Hello Vue!};} });methods 定义组件方法 new Vue({el: #app,data() {return { c…...
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall DataBall 助力快速掌握数据集的信息和使用方式。 贵在坚持! * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s…...
2025年3月AGI技术月评|技术突破重构数字世界底层逻辑
〔更多精彩AI内容,尽在 「魔方AI空间」 ,引领AIGC科技时代〕 本文作者:猫先生 ——当「无限照片」遇上「可控试穿」,我们正在见证怎样的智能革命? 被低估的进化:开源力量改写游戏规则 当巨头们在AGI赛道…...
【k8s】k8s是怎么实现自动扩缩的
Kubernetes 提供了多种自动扩缩容机制,主要包括 Pod 水平自动扩缩(HPA)、垂直 Pod 自动扩缩(VPA) 和 集群自动扩缩(Cluster Autoscaler)。以下是它们的实现原理和配置方法: 1. Pod …...
协作开发攻略:Git全面使用指南 — 引言
协作开发攻略:Git全面使用指南 — 引言 Git 是一种分布式版本控制系统,用于跟踪文件和目录的变更。它能帮助开发者有效管理代码版本,支持多人协作开发,方便代码合并与冲突解决,广泛应用于软件开发领域。 文中内容仅限技…...
【AI提示词】私人教练
提示说明 以专业且细致的方式帮助客户实现健康与健身目标,提升整体生活质量。 提示词 # Role: 私人教练## Profile - language: 中文 - description: 以专业且细致的方式帮助客户实现健康与健身目标,提升整体生活质量 - background: 具备丰富的健身经…...
【星海出品】Calico研究汇总
Calico项目由Tigera公司发起并主导开发 源码 https://github.com/projectcalico/calico?tabreadme-ov-file#-join-the-calico-community 简介 Tigera是一家专注于云原生安全的公司,于2016年成立,其核心产品包括开源的Calico项目以及商业版的Calico Ent…...
观成科技:摩诃草组织Spyder下载器流量特征分析
一、概述 自2023年以来,摩诃草组织频繁使用Spyder下载器下载远控木马,例如Remcos。观成安全研究团队对近几年的Spyder样本进行了深入研究,发现不同版本的样本在数据加密、流量模式等方面存在差异。基于此,我们对多个版本样本的通…...
中心极限定理(CLT)习题集 · 题目篇
中心极限定理(CLT)习题集 题目篇 共 18 题,覆盖经典 CLT、Lyapunov/Lindeberg 条件、Berry–Esseen 评估、 以及工程/数据科学应用与编程仿真。推荐先独立完成,再看《答案与解析篇》。 之前已经出过相关的知识点文章,…...
ITL和TTL线程间值的传递
InheritableThreadLocal InheritableThreadLocal 继承自 ThreadLocal,增加了父线程到子线程的值传递功能。当一个新线程被创建时,InheritableThreadLocal 会将父线程中 ThreadLocal 变量的值拷贝到子线程(浅拷贝),子线…...
Android学习总结之Room篇
一、Room 框架基础 1. 实体类(Entity) 实体类用于描述数据库表的结构。通过使用 Entity 注解,可以将一个 Java 类映射到数据库中的一张表。例如,以下是一个简单的 User 实体类: import androidx.room.Entity; impor…...
java IO流
一:概述 (1)IO (2)流 二:分类 (1)流向 (2)数据单位 (3)IO流角色 三:API (1)InputStream ÿ…...
STM32 串口USART
目录 常见的通信方式 串行通信和并行通信 全双工,半双工和单工通信 同步通信和异步通信 通信速率 常见的通信协议 串口基础知识 电平特性 串口传输协议 STM32F103的USART资源 端口引脚 数据寄存器单元 发送接收控制单元 实现串口发送 printf…...
数字IC后端项目典型问题之后端实战项目问题记录(2025.04.24)
今天给大家分享下近两天小编帮助学员解决的几个经典后端项目问题。希望能够对大家的学习和工作有所帮助。 Q1:在做a7top顶层物理验证Calibre LVS检查时提示NOT COMPARED,请问是什么原因? 我们在用calibre检查LVS后,其结果基本上就是以下三种…...
关于边缘计算盒子的外部接口保护
边缘计算盒子是一种基于边缘计算和人工智能技术的智能设备,它内置了灵活可配的多样化AI算法库,所以也被称为AI算法盒子或智能边缘分析一体机,可以将数据处理和分析的能力推至离数据源最近的边缘位置,提供高效的数据处理和实时响应…...
OCP考试需要注意什么?
一、OCP考试需要准备的资料 身份证件:携带有效的身份证件(如身份证、护照等),以便在考试当天进行身份验证。确保身份证件在考试当天仍然有效,并且与报名时使用的证件一致。 准考证:打印并携带准考证&…...
git Http改用户下载
用原先别人账号,无权下更新 http方式设置自己账号 例如 git fetch --all 提示没有权限从 http://192.168.1.2/gitlab/项目路径.git下载 git remote set-url origin http://your-username192.168.1.2/gitlab/项目路径.git your-username修改成自己的git账号 需要输入一个Tok…...
postgres 导出导入(基于数据库,模式,表)
在 PostgreSQL 中,导出和导入数据库、模式(schema)或表的数据可以使用多种工具和方法。以下是常用的命令和步骤,分别介绍如何导出和导入整个数据库、特定的模式以及单个表的数据。 一、导出数据 1. 使用 pg_dump 导出整个数据库…...
把dll模块注入到游戏进程的方法_挂起进程注入
一. 概述 挂起进程注入是指在创建进程的时候把运行状态设置为挂起,然后创建一个远程线程,来注入。挂起进程注入作为远线程注入的一个补充,可以在进程创建的时候就注入,从而注入时间较早,不宜被拦截。易知挂起进程注入的局限性也就是如果进程已经启动,那么这种注入方式就…...
TypeScript 开发实战:如何安全替换字符串中的关键字
在 TypeScript 开发中,我们经常需要处理字符串替换的场景。最近我在开发一个表达式解析功能时,遇到了一个有趣的挑战:如何将用户输入的简化数学表达式(如"sin")替换为标准形式(如"Math.sin&…...
ES6 模块化 与 CommonJS 的核心概念解析
以下是关于 ES6 模块化 与 CommonJS 的核心概念解析、知识点总结及使用场景说明: 1. ES6 模块化与 CommonJS 是什么? ES6 模块化(ECMAScript Modules, ESM) 定义:ES6 标准引入的模块系统,使用 import 和 …...
【踩坑记录】stm32 jlink程序烧录不进去
最近通过Jlink给STM32烧写程序时一直报错,但是换一个其他工程就可以烧录,对比了一下jink配置,发现是速率选太高了“SW Device”,将烧录速率调整到10MHz以下就可以了...
CS144 Lab 6 实战记录:构建 IP 路由器
1 实验背景与目标 在 CS144 的 Lab 6 中,我们需要在之前实现的 NetworkInterface(Lab 5)基础上构建一个完整的 IP 路由器。路由器的主要任务是根据路由表将接收到的 IP 数据报转发到正确的网络接口,并发送给正确的下一跳…...
AI与智能能源管理:如何通过AI优化能源分配和消耗?
引言:能源管理面临的新挑战 在“双碳”目标持续推进的背景下,能源管理已经不再是简单的节电节水问题,而是关乎可持续发展和企业长期竞争力的核心议题。无论是工业园区、写字楼,还是家庭用户,能源的使用正在变得越来越复…...
【蓝桥杯】产值调整
产值调整 题目描述 偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 A A A、 B B B 和 C C C 表示。这些矿山的产出是小镇经济的核心,支撑着…...
使用Next.js构建单页面React应用
最近遇到一个问题 突然要一个单页面的项目 用惯了Next.js 而 create-react-app 又不推荐且不灵活 最终找发现Nextjs也支持单页面应用 以下是使用Next.js构建单页面React应用过程 1 正常创建项目 (我选择的是Pages Router 而非 AppRoute) 2 修改配置文件 next.config.ts impor…...
Python字符串三剑客:len()、split()、join()深度解析
目录 一、len():字符串的"测谎仪" 二、split():字符串的"解剖刀" 参数解析: 实战场景: 三、join():字符串的"缝合怪" 性能优势: 实战案例: 高级技巧&…...
大模型是如何生成内容的?
大模型(如 GPT、Claude、LLaMA 等)生成内容的过程,其实就是一个 逐词预测上下文推理 的过程。我们可以把它想象成一个“超级自完成引擎”:每一步都在问自己—— “在目前上下文下,最合理的下一个词是什么?”…...
Python元组全面解析:从基础到高级应用指南
一、元组基础概念与核心特性 1.1 元组的本质定义 元组(Tuple)是Python中重要的不可变序列类型,由多个元素组成的有序集合。其核心特性表现在: 元素按插入顺序存储,支持索引访问所有元素存储在连续内存空间ÿ…...
Docker部署DeepSeek常见问题及解决方案
在使用Docker部署DeepSeek的过程中,许多开发者可能会遇到一些常见问题。本文整理了几个高频问题及其解决方案,帮助大家更顺利地完成部署。 镜像拉取失败 问题现象 执行 docker pull 命令时,提示超时或镜像不存在。 可能原因 1. 网络环境不稳定,导致连接Docker Hub失败…...
身份证实名认证接口数字时代的信任基石-node.js实名认证集成
在互联网深度渗透生活的当下,从线上购物、社交娱乐到金融理财、政务办理,每一次指尖的触碰都在虚拟世界中留下痕迹。身份证实名认证作为连接现实身份与网络身份的桥梁,正以其不可替代的作用,重塑着数字时代的信任体系。它不仅是保…...
多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)
多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究) 目录 多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)效果一览基本介绍程序设计参考资料 效果一览…...
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)是人工智能领域两个重要的研究方向,虽然二者可以结合(如深度强化学习),但其核心思想、目标和应用场景存在本质区…...
图论---Prim堆优化(稀疏图)
题目通常会提示数据范围: 若 V ≤ 500,两种方法均可(朴素Prim更稳)。 若 V ≤ 1e5,必须用优先队列Prim vector 存图。 #include <iostream> #include <vector> #include <queue> #include <…...
【优秀三方库研读】【C++基础知识】odygrd/quill -- 折叠表达式
compute_encoded_size_and_cache_string_lengths 方法中这段代码是一个C的折叠表达式(fold expression)的应用,用于计算多个参数编码后的总大小。下面我将详细解释这段代码的每个部分,并说明为什么这样写。 代码如下: …...
优化Nginx的下载功能
缘起: 我购置了一台阿里云ECS,其EIP带宽3m/s,但是在其上的作为下载文件的服务器nginx提供的下载速度仅有几百KB。 分析: 既然没有达到带宽瓶颈,肯定存在优化的空间。浮现脑海的想法,nginx没有进行最佳配置…...
Vue3集成浏览器API实时语音识别
效果示例 用法 <!-- 浏览器语音识别 --> <BrowserSpeechRecognitionModal v-if"showModal" :isOpen"showModal" close"showModal false" confirm"handleRecognitionResult" />const showModal ref(false); const input…...
Python3 基础:函数定义与调用
Python3 基础:函数定义与调用 什么是函数?一、函数的定义二、函数的调用三、函数参数3.1位置参数3.2关键字参数3.3默认参数值3.4可变数量的参数args:接收任意数量的位置参数**kwargs:接收任意数量的关键字参数 3.5 综合使用各种参…...
Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开
以下是 Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开: 1. Vue 2 的响应式 API 核心机制 基于 Object.defineProperty: 通过劫持对象的 getter 和 setter 实现数据变化追踪。限制&…...
修改了Element UI中组件的样式,打包后样式丢失
修改了Element UI中组件的样式,在本地运行没有问题,但是打包到线上发现样式丢失(样式全部不生效、或者有一部分生效,一部分不生效),问题在于css的加载顺序导致代码编译后样式被覆盖了, 解决办法…...
大模型工业化元年:GPT-5开启通用AI新纪元,中国技术如何破局?
过去一周,AI领域的焦点无疑是OpenAI发布的GPT-5预览版,以及全球大模型技术从实验室迈向工业化的关键转折。这场变革不仅标志着通用人工智能(AGI)的进一步逼近,更掀起了全球产业链的竞争与反思。本文将从技术突破、产业…...
离线电脑安装python包
离线电脑安装python第三方库 在联网电脑上下载Python包 使用pip安装所需的包,例如 pip install requests numpy导出已安装的包列表 pip freeze > requirements.txt根据requirements.txt下载包及其所有依赖项到指定目录: pip download -r require…...
【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享
摘要 本篇博客详细介绍了我基于 HybridCLR 与 AR Foundation 的 Unity AR 开发插件,旨在为开发者提供高效的跨平台热更新方案。文章从背景与动机出发,覆盖一键安装工具、环境配置、热更新数据制作与示例程序运行等核心模块,并展示代码结构与使…...
深入浅出学会函数(下)
5. return语句 在函数的设计中,函数中经常会出现return语句,这里讲一下return语句使用的注意事项。 return 后面可以是一个数值,也可以是一个表达式,如果是表达式先执行表达式,再返回表达式的结果。return 后面也可以…...
架构-软件工程
一、软件过程模型(核心高频考点) 1. 瀑布模型 知识点:严格分阶段(需求→设计→编码→测试→维护),前一阶段输出是后一阶段输入,阶段间因果紧密,适合需求明确且稳定的项目。缺点&am…...
Redis 及其在系统设计中的作用
什么是Redis Redis 是一个开源的内存数据结构存储系统,可用作数据库、缓存和消息代理。它因其快速的性能、灵活性和易用性而得到广泛应用。 Redis 数据存储类型 Redis 允许开发人员以各种数据结构(例如字符串、位图、位域、哈希、列表、集合、有序集合…...