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

Java SE(6)——类和对象

1.初始面向对象

1.1 什么是面向对象

Java是一门纯面向对象的编程语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交换来完成一件事情

1.2 面向过程&面向对象的区别

这里以洗衣服为例:
1.手洗衣服过程
在这里插入图片描述
按照以上方式洗衣服,我们必须要亲自完成每一个阶段,其中每个阶段的处理方式也要我们自己来把握,比如:加水量,洗衣粉的量,搓衣服的力度等等。如果某个以后不洗衣服,改成洗鞋子,那么以上的流程就不一样了。按照这种方式来写代码,将来对代码进行扩展维护就比较困难
2.现在洗衣服的过程
现在洗衣服会经常用到洗衣机来完成,那么使用洗衣机来洗衣服一般涉及四个对象:人,衣服,洗衣机,洗衣粉
洗衣服的过程如下:
人把衣服放进洗衣机,加入洗衣粉,启动洗衣机
以上整个过程中,主要是人,衣服,洗衣机,洗衣粉这四个对象在交互。人不需要关注洗衣机是怎么洗衣服的,人只需要把衣服放进去,加洗衣粉,然后启动开关就行了。

换言之,人只需要面向洗衣机这个对象,就能完成洗衣服,而不需要面向洗衣服的各个过程,这就是面向对象和面向过程的区别

2.类的定义和使用

面向对象编程关注的是对象,对象就相当于是生活中的实物,比如:洗衣机。但是计算机不知道什么是洗衣机,这需要我们开发人员来告诉计算机什么是洗衣机
在这里插入图片描述
上图左边的信息就是对洗衣机的描述,我们可以用这种描述信息来表示一个具体的实物,这个过程称为抽象。所谓抽象,指的是从具体事物中抽取共同的、本质的特征,忽略次要的、非本质的特征。但是这些简化的抽象结果(图片左侧的描述信息)也不能被计算机识别,开发人员就需要使用某种面向对象的编程语言来进行描述,比如:Java

2.1 简单认识类

**类是对一个实体(对象)来进行描述的。**主要描述该实体(对象)有哪些属性,有哪些功能,描述完成后计算机就可以识别了。以上述洗衣机为例,我们使用左边的描述信息来抽象一台洗衣机,但是计算机并不能识别这些描述信息,我们可以将这些信息放进一个类里面,然后计算机就可以识别了

2.2 类的定义格式

定义类的具体语法如下:

    field;      //属性或者成员变量method;     //行为或者成员方法 } ```

class是定义类使用的关键字,ClassName是类的名字,{}中是类的主体,类的主体中定义了类有哪些属性,有哪些方法
下面我们来定义一个类来描述一台洗衣机:

public class WashingMachine {//品牌public String brand;//型号public String model;//大小public Double size;//重量public Double weight;//价格public Double price;//洗衣服public void wash() {System.out.println("Washing clothes...");}//脱水public void dehydrate() {System.out.println("Dehydrating clothes...");}
}

上述过程中,我们使用Java语言定义了一个洗衣机类,通过javac编译后转换为字节码文件,再由JVM翻译就可以被计算机识别了(Java文件如何被计算机识别,请看博文Java虚拟机——JVM(Java Virtual Machine)解析一)
注意1:

  • 类名采用大驼峰形式。大驼峰:每个单词的首字母大写
  • 类的成员变量/方法暂时使用public修饰。public是访问限定修饰符之一,后面讲到继承时再介绍
  • 类的成员变量/方法暂时不使用static修饰

下面再来定义两个类来熟悉一下类的定义
(1)定义Dog类

class Dog{public String name;public int age;public String color;//public void eat(){System.out.println("eat food");}public void bark(){System.out.println("汪汪汪...");}
}

(2)定义学生类

class Student{public String name;public int age;public int id;public double score;public String height;public String weight;//public void exam(){System.out.println("参加考试");}public void doHomework(){System.out.println("写作业");}
}

注意2:

  • 一个Java文件建议定义一个类
  • 使用public修饰的类在一个Java文件中只能存在一个
  • 使用public修饰的类的类名和所在文件的文件名相同

3.类的实例化

3.1 什么是实例化?

在上述代码中,我们定义了WashingMachine、Dog和Student类,就相当于在计算机中定义了这三个新的数据类型。和int、float等基本数据类型一样,只不过int和float是Java内置的2类型,而WashingMachine这些是用户自定义的类型,我们通过这些自定义类型就可以定义实例/对象。而通过来定义实例/对象的过程,称之为实例化,在Java中需要借助new关键字来完成实例化
在这里插入图片描述

3.2 如何访问对象中的成员变量/方法?

    public static void main(String[] args) {Dog dog = new Dog();dog.name = "Dog";System.out.println(dog.name);dog.age = 18;System.out.println(dog.age);dog.color = "blue";System.out.println(dog.color);dog.eat();dog.bark();} } ```

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

  • Java中使用.来访问对象中的成员变量/方法
  • 同一个类可以实例化多个对象

3.3 类和对象的关系

是一种抽象的数据类型,它可以实例化一组具有相同属性(成员变量)和行为(成员方法)的对象。类可以看作是一个蓝图或者模板,用于创建对象
对象是类的具体实现,每个对象都可以给自己的属性(成员变量)赋予独特的

房屋和具体的房子

  • 类(Class):房屋(House)
    属性(Attributes):房间数量、面积、楼层数、地址
    方法(Methods):建造、入住、出售
  • 对象(Object):具体的房子,如“张三的家”
    实例化(Instantiation):张三的家是一个具体的房子,它有5个房间,面积是150平方米,3层楼,地址是“北京市朝阳区XX路”
    行为(Behavior):张三的家可以被建造、入住或出售
    在这里插入图片描述

4.this关键字

4.1 为什么要使用this?

这里举个例子
在这里插入图片描述

预期结果:2025-5-1
实际结果:null-null-null

原因分析:

    public void setDate(String year, String month, String day) {year = year;month = month;day = day;}

这个方法中,形参的参数名和MyDate类的成员变量吗名一致,当给year赋值时,编译器无法区分year是成员变量还是方法的局部变量,在这种情况下会优先调用局部变量,相当于是自己给赋值

    public void printDate(){System.out.println(year + "-" + month + "-" + day);}

这个方法中没有形参,调用的参数(year/month/day)只能是MyDate类的成员变量,由于setDate方法没有给成员变量赋值,所以printDate打印的时候才会打印出null-null-null。分析到这里就明白了,问题在于当方法的形参名和类的成员变量名一致时,该如何进行区分呢?这就要借助this关键字

4.2 this是什么?

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完 成

通过代码来解释一下:
在这里插入图片描述
当编译器去调用成员变量的时候都会通过this关键字来调用。this引用指向当前对象,这句话又该怎么理解呢?以上面的代码为例在这里插入图片描述
这里的当前引用指的就是myDate。换言之,this = myDate。

    public void setDate(String year1, String month1, String day1) {//this.year的含义是:myDate指向的对象中的year//this.year = year1;这段代码的意思是:把   方法形参year1   赋值给   myDate指向的对象中的yearthis.year = year1;this.month = month1;this.day = day1;}

修改之后的代码如下:

public class MyDate {public String year;public String month;public String day;//public void setDate(String year1, String month1, String day1) {//使用this关键字来区分哪个是成员变量,哪个是方法形参this.year = year1;this.month = month1;this.day = day1;}//public void printDate(){System.out.println(this.year + "-" + this.month + "-" + this.day);}//public static void main(String[] args) {MyDate myDate = new MyDate();myDate.setDate("2025","5","1");myDate.printDate();}
}

注意:在刚学习Java的使用就提醒过,使用一个变量之前需要给该变量赋初值,否则会报错
在这里插入图片描述
但是:
在这里插入图片描述
打印结果是null-null-null,并没有报错。这是怎么回事呢?
原因是,对于成员变量来说,如果没有进行初始化,会有⼀个对应的默认值
String类型是引用类型,会赋予默认值null,所以不会报错

默认值遵循如下规则:

数据类型默认值
byte0
short0
int0
long0
booleanFALSE
float0.0f
double0
引用类型(reference)null

5.对象的构造及初始化

上文已经介绍到,成员变量在没有赋初值的时候会赋予默认值,这就是对象的默认初始化。说实话,我个人认为这是防止程序报错而出现的一个措施,不算正常的初始化操作,那么对象的初始化有哪些方式呢?

5.1 就地初始化

声明成员变量时,就直接给出了初始值

public class MyDate {public String year = "2025";public String month = "5";public String day = "1";//public void setDate(String year1, String month1, String day1) {this.year = year1;this.month = month1;this.day = day1;}//public void printDate(){System.out.println(this.year + "-" + this.month + "-" + this.day);}//public static void main(String[] args) {MyDate myDate = new MyDate();myDate.printDate();}
}

5.2 自定义方法初始化

用户自定义一个方法来进行成员变量的初始化操作

public class MyDate {public String year;public String month;public String day;//public void setDate(String year1, String month1, String day1) {this.year = year1;this.month = month1;this.day = day1;}//public void printDate(){System.out.println(this.year + "-" + this.month + "-" + this.day);}//public static void main(String[] args) {MyDate myDate = new MyDate();myDate.setDate("2025","5","1");myDate.printDate();}
}

5.3 构造方法初始化

上面介绍的两种初始化方法,说实话都不是很常见。就地初始化灵活性太差;自定义方法初始化还需要创建并调用自定义的方法,不太方便

那么,有没有既灵活又方便的初始化方式呢?
那就是使用构造方法来初始化

5.3.1 什么是构造方法?

构造方法(也称为构造器)是一个特殊的成员方法,方法名必须和类型一致,在创建对象时由编译器自动调用,并且在整个对象的生命周期内构造方法只会调用一次

public class MyDate {public String year;public String month;public String day;//public MyDate(String year, String month, String day) {this.year = year;this.month = month;this.day = day;}//public void printDate(){System.out.println(this.year + "-" + this.month + "-" + this.day);}//public static void main(String[] args) {MyDate myDate = new MyDate("2025","5","1");myDate.printDate();}
}

在使用new关键字实例化对象的时候,编译器会根据括号内的参数数量和类型来判断调用哪个构造方法。这段代码中,new对象的时候一共传递了三个String类型的参数,编译器就会查找哪个构造方法的参数列表能与之对应

5.3.2 构造方法注意事项&使用规范

注意:

  • 1.构造方法名必须和类名一致
  • 2.没有返回值,设置void也不行
  • 3.创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
  • 4.构造方法可以重载(用户根据自己的需求创建不同参数列表的构造方法)
  • 一般来说,构造方法使用public修饰

注意6:
当用户没有手动添加构造方法的时候,编译器会默认生成一份无参的构造方法。当用户显式地添加构造方法(不论有参还是无参)的时候,编译器将不再默认生成构造方法
在这里插入图片描述
左图中,用户没有显式地添加构造方法,编译器会默认生成一个无参的构造方法,当用户需要实例化一个不赋初值地对象时,就能匹配到该无参构造方法;右图中,用户显式地添加一个构造方法,参数列表有三个形参,当用户需要实例化一个不赋初值地对象时,由于编译器没有默认生成一个无参的构造方法,导致匹配失败。所以,构造方法也有一个不成文的使用规范:当用户显式地添加构造方法后,不论无参的构造方法有没有用,都建议添加上

5.3.2 构造方法中使用this来简化代码

public class MyDate {public String year;public String month;public 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 void printDate(){System.out.println(this.year + "-" + this.month + "-" + this.day);}
}
class Test{public static void main(String[] args) {MyDate myDate = new MyDate();myDate.printDate();}
}

在上述代码中,new对象的时候会默认调用无参的构造方法,无参的构造方法内使用了this()代码,编译器就会根据括号内的参数数量和类型去查找参数列表与之匹配的构造方法
注意:

  • this()必须是构造方法中的第一条语句
  • this()不能形成环的调用
    在这里插入图片描述

相关文章:

Java SE(6)——类和对象

1.初始面向对象 1.1 什么是面向对象 Java是一门纯面向对象的编程语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交换来完成一件事情 1.2 面向过程…...

Kubernetes(k8s)的API Server 组件原理与结合生产实战教程

一、API Server 架构深度解析 1. 核心架构设计 二、生产环境安全加固实战 1. 认证(Authentication) 2. 授权(Authorization) 3. 准入控制(Admission Control) 三、性能优化与调参 1. 关键启动参数 四…...

Java面试高频问题(31-33)

三十一、服务网格:东西向流量治理与故障注入 服务网格架构分层 mermaid graph BT subgraph Control Plane APilot --> BEnvoy Sidecar CMixer --> B DCitadel --> B end subgraph Data Plane B --> E服务A B --> F服务B B --> G服务C end 核心能…...

VSCode开发调试Python入门实践(Windows10)

我的Windows10上的python环境是免安装直接解压的Python3.8.x老版本,可参见《Windows下Python3.8环境快速安装部署。 1. 安装VSCode 在Windows 10系统上安装Visual Studio Code(VS Code)是一个简单的过程,以下是详细的安装方法与…...

C++——入门基础(2)

文章目录 一、前言二、C入门2.1 缺省参数2.2 函数重载2.2.1 参数类型不同2.2.1.1 整体参数类型不同2.2.1.2 参数类型顺序不同 2.2.2 参数个数不同2.2.3 避坑注意2.2.3.1无参与有参2.2.3.2 返回值不同 2.3 引用2.3.1 引用的概念2.3.2引用的结构2.3.3 引用的特点2.3.4引用的作用2…...

【MySQL】复合查询与内外连接

目录 一、复合查询 1、基本查询回顾: 2、多表查询: 3、自连接: 4、子查询: 单列子查询 多行子查询: 多列子查询: 在from语句中使用子查询: 5、合并查询: union&#xff1…...

第3篇:请求参数处理与数据校验

在 Web 开发中,请求参数处理与数据校验是保障系统稳定性的第一道防线。本文将深入探讨 Egg.js 框架中参数处理的完整解决方案,涵盖常规参数获取、高效校验方案、文件流处理等核心功能,并分享企业级项目中的最佳实践。 一、多场景参数获取策略…...

Android JIT编译:adb shell cmd package compile选项

Android JIT编译:adb shell cmd package compile选项 例如: adb shell cmd package compile -m speed -f --full 包名 配置参数指令说明: compile [-r COMPILATION_REASON] [-m COMPILER_FILTER] [-p PRIORITY] [-f] [--primary-dex] …...

排序算法——冒泡排序

一、介绍 「冒泡排序bubblesort」通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。 冒泡过程可以利用元素交换操作来模拟:从数组最左端开始向右遍历,依次比较相邻元素大小,如果“左…...

文献阅读篇#5:5月一区好文阅读,BFA-YOLO,用于建筑信息建模!(上)

期刊简介:《Advanced Engineering Informatics》创刊于2002年,由Elsevier Ltd出版商出版,出版周期Quarterly。该刊已被SCIE数据库收录,在中科院最新升级版分区表中,该刊分区信息为大类学科工程技术1区,2023…...

工行手机银行安全吗?在应用商店下载工商银行安全吗?

现在很多的人都会用手机银行,其中工行的使用几率也是比较高的,但大家在使用的过程中就会比较关心使用工行手机银行是否安全。如果直接在应用商店下载,是否有安全保障? 工行的手机银行会拥有较高的保障,从技术到服务都可…...

python如何word转pdf

在Python中,将Word文档(.docx或.doc)转换为PDF可以通过多种库实现。以下是几种常见的方法及详细步骤: 方法1:使用 python-docx comtypes(仅Windows,需安装Word) 适用于Windows系统…...

在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇实战指南

前言 RabbitMQ 是业界常用的开源消息中间件,支持 AMQP 协议,易于部署、高可用、插件丰富。本文以阿里云 ECS 上运行的 Ubuntu 24.04 LTS 为例,手把手带你完成 RabbitMQ 从仓库配置到运行的全流程,并分享在国内环境下常见的坑与对应解决方案。 环境概况 操作系统:Ubuntu …...

Linux Shell 重定向与管道符号(>, >>, |)的实现机制

文章目录 Linux Shell 重定向与管道符号(>, >>, |)的实现机制一、重定向基础:dup2() 的核心作用二、输出重定向的实现原理>(覆盖重定向)>>(追加重定向) 三、| 管道符的实现原…...

GitHub 趋势日报 (2025年04月30日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image⭐ 1686⭐ 54925Python2Qwe…...

计算机操作系统知识集合

主要来自小林coding 硬件结构 cpu位宽 如果用 32 位 CPU 去加和两个 64 位大小的数字,就需要把这 2 个 64 位的数字分成 2 个低位 32 位数字和 2 个高位 32 位数字来计算,先加个两个低位的 32 位数字,算出进位,然后加和两个高位…...

PostgreSQL数据类型

数据类型 数值类型 整数类型 SMALLINT 小范围整数,取值范围:-32768 ~ 32767 INT(INTEGER) 普通大小整数,取值范围:-2147483648 ~ 2147483647 浮点数类型 REAL 6位十进制数字精度 NUMERIC(m, n) 任意精度…...

在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?

KVM(Kernel-based Virtual Machine)和Docker是Linux环境中两种不同的虚拟化技术,它们在实现原理、资源隔离程度、应用场景等方面存在显著区别: 实现原理与技术层级 KVM:KVM是一种基于硬件辅助虚拟化的全虚拟化技术&a…...

【docker学习笔记】如何删除镜像启动默认命令

一些镜像会在它打镜像时&#xff0c;加入一些默认的启动命令&#xff0c;可以通过docker inspect \<image id\>来查看Entrypoint。如下图&#xff0c;docker run启动时&#xff0c;会默认执行 "python3 -m vllm.entrypoints.openai.api_server" 如果不想执行&…...

c语言 39.0625转为16进制

c语言 39.0625转为16进制 寄存器的4&#xff5e;15对应整数部分 39为整数部分 39 &#xff08;10进制&#xff09; 0x27&#xff08;16进制&#xff09; 寄存器的0&#xff5e;3对应小数部分 0.0625为小数部分 0.0626 1/16 则0&#xff5e;3位十六进制值应为 0x1 39.06250…...

【阿里云大模型高级工程师ACP习题集】2.8 部署模型

习题集: 以下关于直接调用模型(无需部署)的说法,错误的是?【单选题】 A. 无需部署模型,只需简单调用API B. 按token量计费,无需担心模型部署的资源消耗 C. 可随意调用,没有任何限制 D. 适合业务初期或中小规模场景 使用vLLM部署模型时,若出现端口被占用的情况,以下做…...

【进阶】--函数栈帧的创建和销毁详解

目录 一.函数栈帧的概念 二.理解函数栈帧能让我们解决什么问题 三.相关寄存器和汇编指令知识点补充 四.函数栈帧的创建和销毁 4.1.调用堆栈 4.2.函数栈帧的创建 4.3 函数栈帧的销毁 一.函数栈帧的概念 --在C语言中&#xff0c;函数栈帧是指在函数调用过程中&#xff0c;…...

猫,为什么是猫?

英语单词 cat&#xff0c;意为猫&#xff1a; cat n.猫 根据首字母象形原则&#xff0c;通常我们喜欢将首字母C&#xff0c;解释为猫爪&#xff0c;C的形象&#xff0c;通常可解释为字母K的右侧的中间凹陷部分&#xff0c;K | <&#xff0c;也就是 C 和 < 相通&#…...

数字智慧方案6169丨智慧医院后勤管理解决方案(58页PPT)(文末有下载方式)

资料解读&#xff1a;智慧医院后勤管理解决方案 详细资料请看本解读文章的最后内容。 在当今万物互联的时代&#xff0c;传统医院后勤管理模式逐渐暴露出诸多弊端&#xff0c;已难以适应医院集团化发展的需求。这份智慧医院后勤管理解决方案资料&#xff0c;深入剖析了传统管理…...

经济学和奥地利学派的起源

&#xff08;一&#xff09;经济学和奥地利学派的起源&#xff1a; 早期思想&#xff1a; 亚当斯密被认为是现代经济学的鼻祖&#xff0c;但早期的亚里士多德、柏拉图以及中国的《管子》等著作也包含经济学思想&#xff0c;但更偏向财政学。 亚当斯密之前的学者&#xff1a; 坎…...

Linux安全清理删除目录bash脚本

直接写清除目录命令可能会因为一时手抖导致删除重要目录 rm -rf是个危险的命令&#xff0c;我写了bash脚本&#xff0c;放在环境变量目录下可以当系统命令来用 这里是单线程的&#xff0c;如果需要更高的性能&#xff0c;需要加入多线程的支持。 1.实现功能 清理目录的子内容…...

C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 17)

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 二…...

Lucene并不是只有倒排索引一种数据结构,支持多种数据结构

Lucene 的核心机制确实以**倒排索引&#xff08;Inverted Index&#xff09;**为核心&#xff0c;但它并不是“全部”都依赖倒排索引。Lucene 的索引结构中还包含其他辅助数据结构&#xff0c;用于支持不同的查询场景。以下是详细的解释&#xff1a; 1. 核心机制&#xff1a;倒…...

使用Docker一键安装SigLens:简单快捷的日志分析解决方案

在当今复杂的IT环境中,高效的日志管理和分析变得越来越重要。SigLens作为一款强大的开源日志分析工具,为开发者和运维人员提供了直观、高效的日志处理体验。本文将介绍如何使用Docker快速安装SigLens,让您在几分钟内就能开始进行日志分析。 为什么选择Docker安装SigLens? Do…...

【Linux】线程池和线程补充内容

个人主页~ 线程池 一、线程池简介单例模式线程池简介 二、单例模式线程池的实现1、ThreadPool.hpp2、Task.hpp3、main.cpp 三、其他常见锁读写锁 一、线程池简介 池化技术我们并不陌生&#xff0c;我们在前面的文章中实现过进程池&#xff0c;这里线程池的作用也是先申请资源交…...

vue3内置组件Suspense的使用

Suspense 实验性功能<Suspense> 是一项实验性功能。它不一定会最终成为稳定功能&#xff0c;并且在稳定之前相关 API 也可能会发生变化 <Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异…...

怪物猎人:世界-冰原10000+mod整合包5月最新更新!

700A大全套精美服装 800M大全套精美服装 3月31日更新 新增 新武器 新特效MOD 当前共计5800MOD整合包 好看的发型mod 实用的功能mod 炫酷的武器mod 新服装新特效新武器实用模组美化&#xff0c;等。 1月14日更新 新增皮肤MOD 500 当前共计2000MOD 1月16日更新 新增超…...

题解:洛谷 CF2091E Interesting Ratio

思路推导 我们先对 32 32 32 和 96 96 96 进行二进制拆分。 相同部分&#xff08;用 α \alpha α 表示&#xff09;&#xff1a; 5 5 5 个 2 2 2。 不同部分&#xff08;用 β \beta β 表示&#xff09;&#xff1a; 1 1 1 和 3 3 3。 gcd ⁡ ( 32 , 96 ) \gcd(32,9…...

PETR和位置编码

PETR和位置编码 petr检测网络中有2种类型的位置编码。 正弦编码和petr论文提出的3D Position Embedding。transformer模块输入除了qkv&#xff0c;还有query_pos和key_pos。这里重点记录下query_pos和key_pos的生成 query pos的生成 先定义reference_points, shape为(n_query…...

《社交类应用开发:React Native与Flutter的抉择》

社交类应用以令人目不暇接的速度更新迭代。新功能不断涌现&#xff0c;从更智能的算法推荐到多样化的互动形式&#xff0c;从增强的隐私保护到跨平台的无缝体验&#xff0c;每一次更新都旨在满足用户日益增长且多变的需求。面对如此高频的更新需求&#xff0c;选择合适的跨端框…...

多模态大语言模型arxiv论文略读(五十三)

Red Teaming GPT-4V: Are GPT-4V Safe Against Uni/Multi-Modal Jailbreak Attacks? ➡️ 论文标题&#xff1a;Red Teaming GPT-4V: Are GPT-4V Safe Against Uni/Multi-Modal Jailbreak Attacks? ➡️ 论文作者&#xff1a;Shuo Chen, Zhen Han, Bailan He, Zifeng Ding, …...

POI从入门到上手(三)-轻松完成EasyExcel使用,完成Excel导入导出.

前言: Apache POI 是一个流行的 Java 库&#xff0c;用于处理 Microsoft Office 格式文件&#xff0c;提供丰富 API 来创建、读取和修改 Office 文档。 1.官网&#xff1a;Apache POI™ - the Java API for Microsoft Documents 2.优点&#xff1a;功能强大&#xff0c;可处…...

使用Delphi 和 CrossVcl 开发基于VCL的 macOS 和 Linux 应用程序简介

CrossVcl 快速入门 大家都知道delphi可以开发linux程序&#xff0c;更多的是知道FMXLinux开发基于FMX的程序&#xff0c;这里给大家介绍使用 Embarcadero Delphi 和 CrossVcl 开发基于VCL的 macOS 和 Linux 应用程序。 概述 CrossVcl 是一个工具链&#xff0c;允许使用 Emb…...

Android Kotlin 项目完整集成 Bugly 异常监控指南

Android Kotlin 项目集成 Bugly 异常监控完整指南 一、Bugly 简介 Bugly 是腾讯提供的专业移动应用异常监控平台&#xff0c;支持&#xff1a; 崩溃报告&#xff08;Java/Native&#xff09;错误分析性能监控热更新功能&#xff08;需额外配置&#xff09; 二、集成步骤 1…...

C++使用accumulate函数对数组进行快速求和

C使用accumulate函数对数组进行快速求和 一、普通数组 1.1方法&#xff1a; 1.先求出数组的长度&#xff1a; int size sizeof(arr) / sizeof(arr[0]); 2.使用指针作为迭代器调用accumulate函数&#xff1a;int sum std::accumulate(arr, arr size, 0); 3.注意带上头文…...

【音视频】RTMP流媒体服务器搭建、推流拉流

服务器&#xff1a;SRS(Simple RTMP Server&#xff0c;⽀持RTMP、HTTP-FLV&#xff0c;HLS) 推流端&#xff1a;ffmpeg OBS 拉流端&#xff1a;ffplay VLC srs播放器 1 安装和测试srs流媒体服务器 1.1 安装srs流媒体服务器 srs官⽹&#xff1a;https://github.com/ossrs/…...

React Router

为什么需要路由&#xff1f; 单页应用&#xff08;SPA&#xff09;&#xff1a;在单页面中实现多视图切换&#xff0c;避免整页刷新。 核心功能&#xff1a; 根据 URL 路径渲染对应组件。 实现页面间导航&#xff08;前进、后退、跳转&#xff09;。 支持动态路由、嵌套路由…...

加载ko驱动模块:显示Arm版本问题解决!

1、问题 驱动模块加载&#xff0c;使用命令&#xff1a;modprobe chrdevbase.ko 时出现&#xff1a; hrdevbase: version magic 4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ’ should be 4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8 ’ ———————…...

OpenGL-ES 学习(9) ---- OpenGL-ES 简介和基本 Pipeline

目录 OpenGL-ES 简介渲染管线顶点和顶点着色器图元装配和光栅化片段和片段着色器逐片段操作EGL OpenGL-ES 简介 OpenGL-ES(OpenGL for Embedded System)是以手持和嵌入式设备为目标的高级3D图形应用编程接口&#xff0c;OpenGL ES 支持的的平台包括 IOS&#xff0c;Android&am…...

计算机视觉(CV)技术的优势和挑战(本片为InsCode)

计算机视觉&#xff08;CV&#xff09;技术是一种利用计算机和算法来模拟人类视觉实现图像和视频处理的技术。它在各个领域都有着广泛的应用&#xff0c;具有许多优势和挑战。 优势&#xff1a; 自动化&#xff1a;CV 技术可以自动识别、分类、跟踪和分析图像和视频数据&…...

Unity 几种主流的热更新方式

一、AssetBundle 资源热更 核心原理 将游戏资源打包为 AssetBundle 文件 运行时动态加载更新的 AssetBundle 实现步骤 资源标记&#xff1a;在 Unity Editor 中设置资源的 AssetBundle 属性 打包生成&#xff1a;使用 BuildPipeline.BuildAssetBundles 生成 AB 包 版本管…...

小结:ipsec-ike

IPSec 手动配置与自动配置&#xff08;IKE动态协商&#xff09; 手动配置IPSec 逻辑图 #mermaid-svg-eNMnNEwnoTjF8fkV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-eNMnNEwnoTjF8fkV .error-icon{fill:#552222;}…...

基于大模型预测的输尿管癌诊疗全流程研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型预测输尿管癌的原理与方法 2.1 大模型技术概述 2.2 用于输尿管癌预测的大模型选择 2.3 数据收集与处理 2.4 模型训练与优化 三、术前风险预测与手术方案制定 3.1 术前风险预测指标 3.2 大模型预测…...

Python Cookbook-6.14 实现状态设计模式

任务 你希望你程序中的某个对象能在不同的“状态”之间切换&#xff0c;而且该对象的行为方式也能随着状态的变化而变化。 解决方案 状态设计模式的关键思路是将“状态”(带有它自身的行为方式)对象化&#xff0c;使其成为一个类实例(带有一些方法)。在Python中&#xff0c;…...

2025智能体的发展趋势

以下是2025年智能体的一些主要发展趋势&#xff1a; 技术能力提升 多模态融合深化&#xff1a;智能体将能够更加自然地处理和理解多种模态的数据&#xff0c;如文本、图像、语音、视频等&#xff0c;实现跨模态的感知、理解和生成。这将使智能体在复杂场景下的应用更加广泛和…...