【Java】类和对象之超级详细的总结!!!
文章目录
- 前言
- 1. 什么是面向对象?
- 1.2面向过程和面向对象
- 2.类的定义和使用
- 2.1什么是类?
- 2.2类的定义格式
- 2.3类的实例化
- 2.3.1什么是实例化
- 2.3.2类和对象的说明
- 3.this引用
- 3.1为什么会有this
- 3.2this的含义与性质
- 3.3this的特性
- 4.构造方法
- 4.1构造方法的概念
- 4.2构造方法的性质
- 4.3成员变量初始化
- 4.3.1默认初始化
- 4.3.2就地初始化
- 4.4构造方法快速创建
- 5.封装
- 5.1封装的概念
- 5.2封装如何实现
- 6.封装扩展之包
- 6.1什么是包
- 6.2怎么打开包(导入包的类)
- 6.3自定义包
- 7.static成员
- 7.1再谈学生类
- 7.2static修饰成员变量
- 7.3static修饰成员方法
- 7.4static成员变量初始化
- 8.代码块
- 8.1代码块概念及分类
- 8.2普通代码块
- 8.3 构造代码块
- 8.4静态代码块
- 结语
前言
咬咬牙学了一段时间Java慢慢掌握基础知识,今天我们来学习熟悉又陌生的类和对象的相关内容。我们会了解static和public究竟是什么,意义是什么等等,会对Java的基本逻辑有更深刻的了解,还能让我们更加熟练多变的使用Java语言。话不多说,让我们开始吧!!
1. 什么是面向对象?
要知道什么是类之前,我们要先了解所谓的面向对象
的Java语言。
我们知道,Java是一门纯面向对象的语言(Object Oriented Program,简称OOP)。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
1.2面向过程和面向对象
我们的C语言就是一种面向过程的语言,基本上什么都需要我们自己来编写,结合现实生活我们可以举个例子。
〚洗衣服〛
现在我们来试试细分一下洗衣服的步骤:
拿盆——放水——放衣服——放洗衣液——搓衣服——换水——再洗——拧干——晾衣服
这是我们传统情况下的洗衣服,注重的是洗衣服的过程。
而当我们用洗衣机洗衣服的时候就完全不一样了。
〚洗衣机洗〛
分析一下啊:
人拿衣服——打开洗衣机——放衣服——放洗衣粉——开启洗衣机——拿衣服——晾衣服
经过细致到人的拆解一共就仅仅以上几小步,并没有洗衣服的过程。在其中总共只有四个对象:人、衣服、洗衣粉、洗衣机,以面向对象的方式来进行处理,就不关注洗衣服的过程,用户只需要通过对象之间的交互来完成〚洗衣服〛这件事就可以了,这就是面向对象的特点。
注意:面向过程和面向对象并不是一门语言,而是解决问题的办法,并没有好坏之分,都有对应的应用场景,理解万岁!
2.类的定义和使用
2.1什么是类?
Java中的类和C语言中的结构体有些相似,都是用多种类型数据来描述一个复杂事物。
面向对象程序设计关注的是对象,而对象是现实生活中的实体,比如洗衣机等,但洗衣机计算机并不知道它的特点,就需要开发人员进行具体描述。
类是用来对一个实体(对象)来进行描述的,主要描述其具有哪些属性,哪些功能。
还是洗衣机,可以看成一个对象
属性:尺寸,品牌,重量,颜色等
功能:甩干,定时等
那么在Java语言中如何描述呢?
2.2类的定义格式
在Java中定义类时需要用到class关键字
class ClassName{field;//字段(属性)或者成员变量method;//行为 或者叫成员方法
}
class为关键字
ClassName为类名
{}中为类的主体
类中包含的内容就称为类的成员,属性是用来描述类的,称之为类的成员属性或者成员变量。方法主要说明类具有哪些功能,称为类的成员方法。
class Dog{//狗类(注意命名是大驼峰定义)String name;//狗名int age;//年龄String color;//毛色public void bark(){System.out.println(this.name + "正在汪汪叫...");}public void eat(){System.out.println(this.name + "正在吃吃吃....");}
2.3类的实例化
2.3.1什么是实例化
定义了一个类,就相当于定义了一种新的类型,和基本类型int、double等类似,不过类属于用户自定义的一种新的类型。
而用类的类型创对象的过程,就叫类的实例化。我们在Java中使用关键字new
来实现实例化。
public class test {public static void main(String[] args) {Dog dog1 = new Dog("dahuang",11,"huangse");dog1.name = "阿黄";dog1.color = "黑黄";dog1.bark();dog1.eat();
}
输出结果:
2.3.2类和对象的说明
总结来看:
- 类像一个设计图,用来对一个实体进行抽象概括描述,限定了类中有哪些成员,是一种自定义类型。
- 一个类可以实例化出多个对象,对象就是具体的实体,有自身独有的数据,实例化出的对象占据实际的物理空间,来存储成员变量。
3.this引用
3.1为什么会有this
在介绍之前我们先来看一段代码。
class Date {public int year;public int month;public int day;public void setDay(int y, int m, int d) {year = y;month = m;day = d;}
}
自定义了一个日期类,在main中实例化就可以写日期了,看起来很完美,也确实很完美。
但我们要是这样改一下还可以实现正常的功能吗?
public void setDay(int year, int month, int day) {year = year;//形参名和成员变量名相同,并没有报错month = month;day = day;}
如果这样在使用的时候到底函数传入进来的数据是谁在给谁赋值就搞不清楚了,像这个时候就需要我们的this关键字登场了!
3.2this的含义与性质
this的含义:引用指向当前对象,即成员方法运行时调用该成员方法的对象。
(简单说就是指名道姓,谁(对象)调用这个成员方法,this就指向这个“谁”)
在成员方法中的所有成员变量的操作,都是由this引用去访问。
3.3this的特性
- this的类型:对应类类型引用,哪个对象调用就是那个对象的引用类型
- this只能在成员方法中使用
- 在“成员方法”中,this只能引用当前对象,不可引用其他任何对象。
- this其实是“成员方法”中第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用的成员方法的对象的引用传递给成员方法,this相当于变量负责来接收。
4.构造方法
上面代码发现每次都要一个个的引用成员变量来实例化对象,感觉很麻烦,有没有那种一次搞定的?
4.1构造方法的概念
【构造方法】,其实是一个特殊的成员方法,方法名字必须与类名相同,在实例化对象时自动调用,并在整个对象的生命周期中只调用一次。
public class Date {public int year;public int month;public int day;// 构造方法:// 名字与类名相同,没有返回值类型,设置为void也不行// 一般情况下使用public修饰// 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次public Date(int year, int month, int day){this.year = year;this.month = month;this.day = day;System.out.println("Date(int,int,int)方法被调用了");}public void printDate(){System.out.println(year + "-" + month + "-" + day);}public static void main(String[] args) {// 此处创建了一个Date类型的对象,并没有显示调用构造方法Date date = new Date(2021,6,9); // 输出Date(int,int,int)方法被调用了date.printDate(); // 2021-6-9}
}
4.2构造方法的性质
构造方法有如下几种性质:
- 构造方法只负责对成员变量进行初始化,并不开辟空间
- 名字必须与类名相同
- 没有返回值类型,设置void也不行
- 构造方法是可以重载的(参数不同即可)
- 如果用户没有设置构造方法,编译器会自动生成一份默认(不带参数)的构造方法(一旦用户定义了构造方法,编译器就不再生成)
4.3成员变量初始化
那要是这样就有一个问题出现了:
“为什么成员变量不初始化使用时不会报错,而局部变量会报错呢????为什么为什么为什么??????”
(接下来就会揭晓了!)
4.3.1默认初始化
要搞清楚这个问题,我们就要去探究new
这个关键字发挥作用的过程。
Date date = new Date(2023,12,4);//实例化对象
String date = "2023/12/4"//局部变量初始化
在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:
- 检测对象对应的类是否加载了,如果没有加载则加载
- 为对象分配内存空间
- 处理并发安全问题
比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突 - 初始化分配的空间,如下:(这是不会报错的关键)
数据类型 | 初始值 |
---|---|
byte | 0 |
char | “u0000” |
short | 0 |
int | 0 |
long | 0L |
boolean | false |
float | 0.0f |
double | 0.0 |
reference | null |
- 设置对象头信息
- 调用构造方法,给对象中各个成员赋值
4.3.2就地初始化
这个很好理解,就是在声明成员变量时,直接手动设置了初始值。
public class Date {public int year = 1900;public int month = 1;public int day = 1;public Date(){}public Date(int year, int month, int day) {}public static void main(String[] args) {Date d1 = new Date(2021,6,9);Date d2 = new Date();}
}
4.4构造方法快速创建
IDEA中有快速创建成员变量构造方法的操作。
操作步骤
1. 在IDEA中创建新的类和几个成员变量
class cat{String name;int age;String sex;
}
2.创建构造方法:右键代码空白处->选择generate
->选择Constructor
3.在弹出的对话框中按住CTRL选择你想要构造的成员变量:
4.成功!!
5.封装
5.1封装的概念
面向对象程序三大特性:封装、继承、多态。 而类和对象阶段,主要研究的就是封装特性。何为封装呢?
简单来说
就是套壳屏蔽细节。
5.2封装如何实现
Java中主要通过类和访问权限来实现封装:类可以将各类数据以及封装数据的方法结合在一起,而访问权限用来控制方法或者字段能否直接在类外使用。因此,Java提供了以下四种访问限定符:
private、public、protected、default
一般情况下成员变量一般设置为private,成员方法设置为public。
6.封装扩展之包
6.1什么是包
在面向对象体系中,提出了软件包的概念,即:
为了更好的管理类,把多个类收集在一起为一组,称为软件包,也有点类似于目录。
在Java中也引入了包,包是对类、接口等的封装机制的体线,是一种对类或者接口等很好的组织方式。
包还有一个重要作用:在同一个工程中允许存在相同名称的类,只要各自在不同的包中即可。
6.2怎么打开包(导入包的类)
Java中已经提供了很多线程的类供我们使用,例如Date类:可以使用java.util.Date
导入java.util
这个包中的Date
类。
public class Test {
public static void main(String[] args) {java.util.Date date = new java.util.Date();System.out.println(date.getTime());}
}
但是这样写要是多起来每次都要写一遍太麻烦了,可以使用import语句导包。
import java.util.Date;
public class Test {public static void main(String[] args) {Date date = new Date();System.out.println(date.getTime());}
}
如果需要使用java.util
中的其他类,可以使用import java.util.*
import java.util.*;
public class Test {public static void main(String[] args) {Date date = new Date();System.out.println(date.getTime());}
}
可以使用import static
导入包中静态的方法和字段
import static java.lang.Math.*;
public class Test {public static void main(String[] args) {double x = 30;double y = 40;double result = sqrt(pow(x, 2) + pow(y, 2));System.out.println(result);}
}
6.3自定义包
基本规则
- 在文件的最上方加上一个 package 语句指定该代码在哪个包中.
- 包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 )
- 包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储
代码. - 如果一个类没有 package 语句, 则该类被放到一个默认包中.
操作步骤
-
在IDEA中先新建一个包:右键src -> 新建 -> 包
-
在弹出的对话框中输入包名,例如
com.test.demo1
-
在包中创建类, 右键包名 -> 新建->类,然后输入类名即可
-
此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了
-
同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句
7.static成员
7.1再谈学生类
使用前文中介绍的学生类实例化三个对象s1、s2、s3,每个对象都有自己特有的名字、性别,年龄,学分绩点等成员信息,这些信息就是对不同学生来进行描述的,如下所示:
public class Student{// ...public static void main(String[] args) {Student s1 = new Student("Li leilei", "男", 18, 3.8);Student s2 = new Student("Han MeiMei", "女", 19, 4.0);Student s3 = new Student("Jim", "男", 18, 2.6);}
}
假设三个同学是同一个班的,那么他们上课肯定是在同一个教室,那既然在同一个教室,那能否给类中再加一个成员变量,来保存同学上课时的教室呢?答案是不行的。
之前在Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量),因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室,这个教室的属性并不需要每个学生对象中都存储一份,而是需要让所有的学生来共享。在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。
7.2static修饰成员变量
static修饰的成员变量,称为静态成员变量,该变量最大的特征就是:不属于某个具体的对象,是所有对象所共享的
【静态成员变量特性】
- 不属于某个具体对象,是类的属性,所有对象共享的,不存储在某个对象的空间中(存在方法区中)
- 既可以通过对象访问,也可以通过类名访问(一般更推荐后者)
- 生命周期伴随类的一生(随类的加载而创建,随类的卸载而销毁)
7.3static修饰成员方法
上面的学习我们知道一般类中的成员变量都设置为private,而成员方法设置为public,那设置之后,Student中的classRoom属性如何在类外访问呢?
在Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。
静态成员一般是通过静态方法来访问的(普通方法也可以访问)
【静态方法特性】
- 不属于某个具体的对象,是类的方法
- 可以通过对象调用,也可以通过
类名.静态方法名
方式调用(更推荐后者) - 不能!在静态方法中访问任何非静态成员变量
- 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时无法传递this引用
7.4static成员变量初始化
注意!静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性
静态成员变量的初始化分为两种:就地初始化和静态代码块初始化。
- 就地初始化
就地初始化指的就是:在定义是直接给初始值
public class Student{private String name;private String gender;private int age;private double score;private static String classRoom = "430";
}
- 静态代码块初始化
这里就到了代码块了,我们接着往下看就好了。
8.代码块
8.1代码块概念及分类
【基础概念】
使用{}
定义的一段代码称为代码块。
根据代码块定义的位置以及关键字,又可以分为以下四种:
- 普通代码块
- 构造块
- 静态块
- 同步代码块(这里先不讨论)
8.2普通代码块
这个很好理解,就是定义在方法中的代码块。
public class Main{
public static void main(String[] args) {{ //直接使用{}定义,普通方法块int x = 10 ;System.out.println("x1 = " +x);}int x = 100 ;System.out.println("x2 = " +x);}
}// 执行结果
x1 = 10
x2 = 100
8.3 构造代码块
构造块:定义在类中的代码块(不加修饰符)。
也叫:实例代码块。构造代码块一般用于初始化实例成员变量
public class Student{//实例成员变量private String name;private String gender;private int age;private double score;public Student() {System.out.println("I am Student init()!");}//实例代码块{this.name = "bit";this.age = 12;this.sex = "man";System.out.println("I am instance init()!");}public void show(){System.out.println("name: "+name+" age: "+age+" sex: "+sex);}
}
public class Main {public static void main(String[] args) {Student stu = new Student();stu.show();}
}
8.4静态代码块
static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
public class Student{private String name;private String gender;private int age;private double score;private static String classRoom;//实例代码块{this.name = "bit";this.age = 12;this.gender = "man";System.out.println("I am instance init()!");}// 静态代码块static {classRoom = "bit306";System.out.println("I am static init()!");}
}
【注意事项】
- 静态代码不管生成多少个对象,只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
- 实例代码块只有在创建对象时才会执行
结语
好了以上就是本篇“【Java】类和对象详解总结”博客的全部内容啦,感谢各位的阅读=v=,如有不足之处欢迎在评论区指出哦!!
觉得可以的话别忘了点赞三连支持一下欧!拜托啦这对我真的很重要o(>ω< )o!!!
相关文章:

【Java】类和对象之超级详细的总结!!!
文章目录 前言1. 什么是面向对象?1.2面向过程和面向对象 2.类的定义和使用2.1什么是类?2.2类的定义格式2.3类的实例化2.3.1什么是实例化2.3.2类和对象的说明 3.this引用3.1为什么会有this3.2this的含义与性质3.3this的特性 4.构造方法4.1构造方法的概念4…...

机器学习的复习笔记3-回归的细谈
一、回归的细分 机器学习中的回归问题是一种用于预测连续型输出变量的任务。回归问题的类型和特点如下: 线性回归(Linear Regression):线性回归是回归问题中最简单的一种方法。它假设自变量与因变量之间存在线性关系,…...

Git常用命令#切换分支
要在 Git 中切换分支,你可以使用 git checkout 命令。 a.创建新分支并切换到该分支 如果你想要创建一个新分支并立即切换到该分支,可以使用以下命令: git checkout -b 新分支名这会创建一个名为 新分支名 的新分支,并将你的工作目…...
【qml入门教程系列】:qml property使用介绍
作者:令狐掌门 技术交流QQ群:675120140 博客地址:https://mingshiqiang.blog.csdn.net/ 文章目录 属性的定义property基本用法属性变更事件通知属性绑定属性别名只读属性默认属性 default property访问和修改属性方式1:使用setProperty方法方式2:使用QQmlContext设置属性自定…...

pbootcms建站
pbootcms建站 一、下载pbootcms二、安装1、进入宝塔面在网站栏,新建站点,将该址里面文件全部清再将下载的pbootcms上传至该地址。 三、修改关联数据库1、在根目录下/config打开database.php照如下修改这里我使用mysqli数据库。修改并使用自已创建的数据库…...
Spring的事务传播行为
文章目录 说一下Spring的事务传播行为 今天来和大家聊聊spring中使用的事务传播行为, 说一下Spring的事务传播行为 spring事务的传播行为说的是,当多个事务同时存在的时候,spring如何处理这些事务的行为。 ① PROPAGATION_REQUIRED…...
04_网络编程
网络编程 什么是网络编程 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的) java.net.* 包下提供了网络编程的解决方案 通信的基本架构 CS 架构(Client 客户端 / Server 服务端)BS 架构(…...

【五分钟】熟练使用numpy.cumsum()函数(干货!!!)
引言 numpy.cumsum()函数用于计算输入数组的累积和。当输入是多维数组时,numpy.cumsum()函数可以沿着指定轴计算累积和。 计算一维数组的累计和 代码如下: # 计算一维数组的累计和 tmp_array np.ones((4,), dtypenp.uint8) # [1, 1, 1, 1] print(&…...

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想
文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班,打车较…...

Python按要求从多个txt文本中提取指定数据
基本想法 遍历文件夹并从中找到文件名称符合我们需求的多个.txt格式文本文件,并从每一个文本文件中,找到我们需要的指定数据,最后得到所有文本文件中我们需要的数据的集合 举例 如现有名为file一个文件夹,里面含有大量的.txt格…...

DFT新手教程:VASP中ISIF取值设置
新手初学VASP计算时首先接触到的就是结构优化的计算任务。 在结构优化中,INCAR中的关键参数包括 IBRION ,NSW,ISIF,EDIFF和EDIFFG 各个参数均可在vaspwiki查到可设置的参数以及该参数所具有的设置的含义。 https://www.vasp.at/…...

pytest自动化框架之allure测试报告的用例描述设置
allure测试报告的用例描述相关方法;如下图 allure标记用例级别severity 在做自动化测试的过程中,测试用例越来越多的时候,如果执行一轮测试发现了几个测试不通过,我们也希望能快速统计出缺陷的等级。 pytest结合allure框架可以对…...

在编程中遇到的问题总结
IDEA空包粘黏问题 创建好目录以后会发现idea自动将空包合并在一起了,而且点击设置里面也没有Compact Middle Package Compact Middle Package如果不在设置的主面板上,则点击Tree Appearance,会发现Compact Middle Package在Tree Appearance里…...
【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(二)
一、数据控制语言(DCL) 1.1 授权(GRANT) 数据控制语言(DCL)是SQL的一个子集,用于控制数据库中的数据访问和权限。GRANT语句是DCL中的一种,用于向用户或角色授予特定的数据库操作权…...

easyexcel多级表头导出各级设置样式(继承HorizontalCellStyleStrategy实现)
easyexcel多级表头导出各级设置样式(继承HorizontalCellStyleStrategy实现) package com.example.wxmessage.entity;import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;…...
QMLfor python pyside6
QML QML是一种用于创建用户界面的声明性语言,它是Qt生态系统中的一部分。QML使用JavaScript语言和其独特的语法来定义用户界面组件,使得开发人员可以轻松地创建现代化、漂亮而又响应迅速的应用程序。 QML是基于QtQuick技术构建的,QtQuick是…...

几何教学工具 Sketchpad几何画板 mac软件特色
Sketchpad几何画板 for Mac是一款适用于macOS系统的几何教学工具,用户可以在其画板上进行各种几何图形的绘制、演示,帮助教师了解学生的思路和对概念的掌握程度。此外,Sketchpad更深层次的功能则是可以用来进行几何交流、研究和讨论ÿ…...

华清远见嵌入式学习——C++——作业5
作业要求: 代码: #include <iostream>using namespace std;//沙发 类 class Sofa { private:string sitting; //是否可坐double *cost; //花费 public://无参构造函数Sofa(){}//有参构造函数Sofa(string s,double c):sitting(s),cost(new double(…...
Java中的类与类之间的关系
1、Java中类与类之间的关系 依赖(Dependency):一个类依赖于另一个类的定义。这种关系通常通过在一个类的方法中创建另一个类的实例来实现。依赖关系是类与类之间最基本的关系之一。关联(Association):关联…...

全新仿某度文库网站源码/在线文库源码/文档分享平台网站源码/仿某度文库PHP源码
源码简介: 全新仿某度文库网站源码/在线文库源码,是以phpMySQL开发的,它是仿某度文库PHP源码。有功能免费文库网站 文档分享平台 实现文档上传下载及在线预览。 仿百度文库是一个以phpMySQL进行开发的免费文库网站源码。仿某度文库实现文档…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...