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

[Java]继承

1. 什么是继承?

继承是面向对象编程的一种机制,允许一个类(叫做子类)继承另一个类(叫做父类)的属性和方法。也就是说,子类可以“继承”父类的行为(方法)和状态(属性),而不需要重新写一遍这些代码。

例子:

假设你有一个父类Animal,它有一个eat方法。你可以创建一个Dog子类,它继承Animal类,这样Dog类就自动拥有Animaleat方法。

// 父类 Animal
class Animal {void eat() {System.out.println("Eating food");}
}// 子类 Dog
class Dog extends Animal {void bark() {System.out.println("Barking");}
}

在上面的例子中,Dog继承了Animal,所以它不仅能使用Dog类自己定义的bark方法,还能使用Animal类的eat方法。也就是说,Dog是“继承”了Animal的。

2. 继承的语法

继承的语法很简单,只需要用extends关键字连接子类和父类。

class Child extends Parent {// 子类的代码
}class 子类 extend 父类{//子类的代码
}
  • Child是子类
  • Parent是父类

3. 构造方法和继承

构造方法是用来初始化对象的,子类不会继承父类的构造方法,但是子类可以通过super()来调用父类的构造方法。super()必须在子类构造方法的第一行。

class Parent {Parent() {System.out.println("Parent constructor");}
}class Child extends Parent {Child() {super();  // 调用父类构造方法System.out.println("Child constructor");}
}

当你创建Child对象时,输出会是:

Parent constructor
Child constructor

因为Child构造方法通过super()先调用了父类的构造方法,然后再执行自己的代码。

4. 重写父类方法

4.1 定义:

子类可以改变父类方法的实现,这叫做“方法重写”(Override)当。子类重写父类的方法时,子类会提供自己版本的实现。

class Animal {void sound() {System.out.println("Some generic sound");}
}class Dog extends Animal {@Override  // 这是注解,表示我们重写了父类的方法void sound() {System.out.println("Bark");}
}

在上面的代码中,Dog类重写了Animal类的sound方法,改成了“Bark”而不是父类的“Some generic sound”。

4.2 重写与重载的区别:

4.2.1 定义

  • 重写(Overriding):指子类重新定义了父类中的方法,以便实现不同的行为。重写发生在继承关系中,子类继承父类的方法,并对其进行修改。子类重写的方法具有与父类方法相同的名称、参数列表和返回类型。

  • 重载(Overloading):指在同一个类中,多个方法具有相同的名字,但参数列表不同。方法的参数列表可以在个数、类型、顺序上有所不同。重载发生在同一个类内,或者子类中也可以重载父类的方法。

4.2.2 发生的场景

  • 重写:发生在子类与父类之间,子类重新定义继承自父类的方法。
  • 重载:发生在同一个类中或继承关系中,方法名相同,但参数不同。

4.2.3 方法签名

  • 重写:重写的方法必须具有与父类被重写方法相同的方法签名,包括方法名称、参数列表、返回类型、异常声明(抛出的异常必须与父类方法抛出的异常相同或更宽松)。重写是动态多态的一部分。

  • 重载:重载的方法具有相同的名称,但参数列表不同。返回类型和异常声明可以不同。重载是静态多态的一部分,编译器在编译时就能确定调用哪个方法。

4.2.4 访问修饰符

  • 重写:子类重写的方法的访问修饰符不能比父类方法更严格。例如,如果父类的方法是public,则子类重写的方法也必须是public,不能是privateprotected

  • 重载:重载方法的访问修饰符可以不同,因为它们属于同一个类或同一个继承层次结构的类。

4.2.5 方法调用时机

  • 重写:方法调用时,Java会根据对象的实际类型来决定调用哪个类的方法,即通过动态绑定(运行时多态)来选择方法。

  • 重载:方法调用时,编译器根据方法的参数列表(数量、类型、顺序)来确定调用哪个版本的方法,即在编译时就能决定。

4.2.6 返回类型

  • 重写:重写方法的返回类型必须与父类方法相同,或者是父类方法返回类型的子类型(协变返回类型)。
    • Java 5 引入了协变返回类型,允许子类方法返回类型是父类方法返回类型的子类。
  • 重载:重载方法可以有不同的返回类型。返回类型并不影响方法的重载判断,重载是通过参数列表的不同来区分的。

4.2.7 例子

重写(Overriding)示例:
class Animal {void sound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {@Overridevoid sound() {System.out.println("Dog barks");}
}public class Main {public static void main(String[] args) {Animal animal = new Dog();animal.sound();  // 输出:Dog barks}
}
  • 在这个例子中,Dog类重写了Animal类中的sound方法。通过多态,animal引用调用了Dog类的sound方法,表现出不同的行为。
重载(Overloading)示例:
class Printer {void print(String text) {System.out.println(text);}void print(int number) {System.out.println(number);}void print(double number) {System.out.println(number);}
}public class Main {public static void main(String[] args) {Printer printer = new Printer();printer.print("Hello, world!");  // 输出:Hello, world!printer.print(100);  // 输出:100printer.print(99.99);  // 输出:99.99}
}
  • 在这个例子中,Printer类中的print方法被重载了。它有多个版本,分别接收不同类型的参数(Stringintdouble)。编译器根据传入参数的类型来决定调用哪个版本的print方法。

4.2.8 总结:重写与重载的区别

特性重写(Overriding)重载(Overloading)
定义子类重新实现父类的方法,方法签名相同同一类中,多个方法具有相同的方法名,但参数列表不同
发生的场景子类与父类之间同一类中或继承类中
方法签名方法名、参数列表、返回类型相同,抛出的异常应相同或更宽松方法名相同,参数列表不同,返回类型和异常可以不同
访问修饰符子类方法的访问修饰符不能比父类方法更严格访问修饰符可以不同
方法调用时机运行时通过动态

5. super关键字

super关键字是用来在子类中引用父类的。可以用来调用父类的方法、访问父类的构造方法等。

  • 访问父类方法:如果子类重写了父类的方法,可以使用super来调用父类的版本。
    class Animal {void sound() {System.out.println("Some generic sound");}
    }class Dog extends Animal {@Overridevoid sound() {super.sound();  // 调用父类的sound方法System.out.println("Bark");}
    }
    

输出会是:

Some generic sound
Bark
  • 访问父类构造方法:如果子类没有自己的构造方法,默认会调用父类的无参构造方法。如果你想让子类调用父类的带参构造方法,使用super()并传入参数。
    class Parent {Parent(String name) {System.out.println("Parent: " + name);}
    }class Child extends Parent {Child() {super("John");  // 调用父类的构造方法并传入参数System.out.println("Child constructor");}
    }
    

6. final关键字与继承

final关键字用来限制继承的行为。

  • final不能被继承。如果父类是final类,子类不能继承它。

    final class Parent {// 不能被继承
    }class Child extends Parent {  // 错误,不能继承final类
    }
    
  • final方法不能被重写。如果父类的方法是final的,子类不能重写该方法。

    class Parent {final void display() {System.out.println("This is final method");}
    }class Child extends Parent {// 错误,不能重写final方法void display() {System.out.println("Child display");}
    }
    

7. 多继承的限制

Java中不支持类的多继承,意思是一个子类只能有一个父类。如果你尝试让一个类继承多个类,Java会报错。这是为了避免多继承时产生的复杂性和冲突。

不过,Java允许一个类实现多个接口,接口类似于父类,但它只包含方法声明,不包含实现。

8. instanceof关键字

instanceof 是 Java 中非常重要的一个关键字,它用于测试一个对象是否是某个类的实例,或者是该类的子类(或实现的接口)的实例。它常常用于进行类型检查,确保对象的类型与预期匹配,从而避免类型转换时出现ClassCastException异常。

8.1 instanceof的基本语法

object instanceof ClassName
  • object:你要检查的对象。
  • ClassName:你要检查的类或接口的名称。

instanceof返回一个布尔值,如果对象是指定类或接口的实例,返回true,否则返回false

8.2 使用instanceof的场景

instanceof常用于以下场景:

  • 类型检查:确保对象是某个类或接口的实例。
  • 避免ClassCastException:在进行类型转换之前,先使用instanceof检查对象的类型,避免类型转换错误。
  • 多态的实现:在实现多态时,可能需要根据对象的实际类型来执行不同的代码。

8.3  例子解析

示例 1:检查对象是否是某个类的实例
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}public class Main {public static void main(String[] args) {Animal a = new Dog();  // a 是 Dog 类的实例if (a instanceof Dog) {//检验对象a是否为Dog类的实例System.out.println("a is an instance of Dog");}if (a instanceof Animal) {//检验对象a是否为Animal类的实例System.out.println("a is an instance of Animal");}if (a instanceof Cat) {//检验对象a是否为Cat类的实例System.out.println("a is an instance of Cat");}}
}

输出:

a is an instance of Dog
a is an instance of Animal
  • 这里,aDog的实例,所以a instanceof Dog返回true,并输出a is an instance of Dog
  • a也是Animal的实例,因为Dog继承自Animal,所以a instanceof Animal也返回true,并输出a is an instance of Animal
  • a不是Cat的实例,所以a instanceof Cat返回false,没有输出。
示例 2:避免ClassCastException
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}public class Main {public static void main(String[] args) {Animal a = new Dog();  // a 是 Dog 类的实例// 在进行类型转换之前,使用 instanceof 检查类型if (a instanceof Dog) {Dog dog = (Dog) a;  // 安全转换,因为 a 确实是 Dog 类的实例System.out.println("Successfully cast to Dog");}// 错误的类型转换if (a instanceof Cat) {Cat cat = (Cat) a;  // 运行时会抛出 ClassCastException,因为 a 不是 Cat 类的实例System.out.println("Successfully cast to Cat");}}
}
  • a instanceof Dogtrue,所以可以安全地将a转换为Dog类型。
  • a instanceof Catfalse,因此不会进行转换,避免了ClassCastException异常。
示例 3:instanceof与接口

instanceof不仅可以用于类,还可以用于接口的实例检查。

interface Playable {void play();
}class Dog implements Playable {@Overridepublic void play() {System.out.println("Dog is playing");}
}public class Main {public static void main(String[] args) {Playable p = new Dog();if (p instanceof Playable) {//检验对象p是否为Playable的实例System.out.println("p is an instance of Playable");}if (p instanceof Dog) {//检验对象p是否为Dog的实例System.out.println("p is an instance of Dog");}}
}

输出:

p is an instance of Playable
p is an instance of Dog
  • p instanceof Playable返回true,因为Dog实现了Playable接口。
  • p instanceof Dog返回true,因为p实际上是Dog类的实例。

8.4 instanceofnull的情况

instanceof在对象为null时,始终返回false,不会抛出NullPointerException

class Animal {}
class Dog extends Animal {}public class Main {public static void main(String[] args) {Animal a = null;if (a instanceof Dog) {System.out.println("a is an instance of Dog");} else {System.out.println("a is not an instance of Dog");}}
}

输出:

a is not an instance of Dog

即使a的类型是Animal(它是Dog类的父类),但由于anullinstanceof检查返回false,不会抛出异常。

8.5  instanceof的性能影响

instanceof运算符的性能是相对较高效的,因为它只会检查对象的运行时类型。然而,如果频繁调用instanceof,或者在大规模的数据结构中进行类型检查,可能会对性能产生一定影响。在这种情况下,考虑优化设计,尽量避免过多的类型检查。

8.6  instanceof的应用场景

  • 类型安全:使用instanceof可以确保类型转换是安全的,避免运行时错误。
  • 多态性实现:通过instanceof判断不同对象的类型,决定调用不同的代码实现。这常见于策略模式、访问者模式等设计模式。
  • 类型检查:在处理复杂的对象层次结构时,使用instanceof可以检测对象的实际类型,并根据不同类型做出不同的处理。

8.7 总结

  • instanceof是用于检查一个对象是否是某个类或接口的实例。
  • 它可以确保在进行类型转换时避免ClassCastException异常。
  • instanceof不仅能检查类的实例,还能检查对象是否实现了某个接口。
  • null对象上使用instanceof时,始终返回false
  • 使用instanceof时要注意性能问题,但它通常是类型检查的最直接和最安全的方式。

9. 子类和父类之间的关系

子类继承了父类的所有字段和方法,意味着子类可以直接使用父类的这些属性和行为。但是,子类并不继承父类的构造方法、初始化块等。

  • 继承的深度:继承不仅是直接的父类和子类关系,Java支持多层继承。也就是说,子类继承父类,父类继承祖父类,依此类推。
    class Grandparent {void greet() {System.out.println("Hello from Grandparent");}
    }class Parent extends Grandparent {void greet() {System.out.println("Hello from Parent");}
    }class Child extends Parent {void greet() {System.out.println("Hello from Child");}
    }
    

当你创建Child对象并调用greet方法时,它会首先执行子类的实现。如果你希望调用父类或祖父类的实现,可以使用super

Child c = new Child();
c.greet();  // 输出:Hello from Child

10. 访问控制符与继承

Java的访问控制符(public, protected, private, 默认(package-private))决定了类、方法或变量的可见性和访问权限。继承时,访问控制符对子类的访问有影响。

  • public:可以被任何类访问。
  • protected:可以被同一包中的类访问,也可以被子类访问(即使子类在不同包中)。
  • private:只能在同一类中访问,不能被子类直接访问。
  • 默认(package-private)只能在同一包中访问,不能被子类访问(即使在同一包外的子类)。
例子:
class Parent {public void publicMethod() {System.out.println("public method");}protected void protectedMethod() {System.out.println("protected method");}private void privateMethod() {System.out.println("private method");}void defaultMethod() {System.out.println("default method");}
}class Child extends Parent {void testMethods() {publicMethod();    // 子类可以访问protectedMethod(); // 子类可以访问// privateMethod(); // 错误:无法访问父类的private方法defaultMethod();   // 子类可以访问默认方法(同一包)}
}

11. 接口与继承

虽然Java不支持多继承(即一个类不能继承多个类),但一个类可以实现多个接口。这是Java实现多重继承的一种方式。

  • 接口:接口定义了一些方法的签名,但没有方法的实现。类可以实现接口,并提供这些方法的具体实现。
    interface Animal {void eat();
    }interface Mammal {void giveBirth();
    }class Dog implements Animal, Mammal {@Overridepublic void eat() {System.out.println("Dog is eating");}@Overridepublic void giveBirth() {System.out.println("Dog gives birth to puppies");}
    }
    

在这个例子中,Dog类实现了AnimalMammal两个接口,因此必须实现这两个接口中的方法。

12. 多态与继承

多态是指同一个方法调用在不同的对象上表现出不同的行为。多态依赖于继承和方法重写。

  • 方法重写(Override)是多态的基础,允许子类实现父类方法的不同版本。
    class Animal {//由Animal这个类延伸得到Dog类和Cat类,这个由一个类得到多个功能不同的类的过程叫多态void sound() {System.out.println("Animal makes a sound");}
    }class Dog extends Animal {@Overridevoid sound() {//由Animal类中的sound方法重写得到Dog类中的另外一个方法,这个过程叫方法重写System.out.println("Dog barks");}
    }class Cat extends Animal {@Overridevoid sound() {//由Animal类中的sound方法重写得到Cat类中的另外一个方法,这个过程叫方法重写System.out.println("Cat meows");}
    }public class Polymorphism_And_Overriding{public static void main(String[] args){Animal a1 = new Dog();a1.sound();  // 输出:Dog barksAnimal a2 = new Cat();a2.sound();  // 输出:Cat meows}
    }
    

通过多态,可以在运行时动态选择调用哪个类的方法。

13. 抽象类与继承

抽象类是不能实例化的类,它通常用作其他类的基类。抽象类可以有抽象方法(没有方法体),也可以有非抽象方法。

  • 抽象方法:在抽象类中定义的方法,只声明没有实现,子类必须提供具体实现。
  • 非抽象方法:普通方法,可以在抽象类中定义实现,子类可以继承或者重写。
    abstract class Animal {abstract void sound();  // 抽象方法,没有实现void sleep() {System.out.println("Animal is sleeping");  // 普通方法,已实现}
    }class Dog extends Animal {@Overridevoid sound() {System.out.println("Dog barks");//实现抽象类中的抽象方法}
    }
    

14. 继承的设计原则

在使用继承时,遵循一些设计原则非常重要:

  • “是一个”关系:子类应该是父类的一种“特化”。即,子类应该能够代替父类使用。例如,Dog类继承自Animal类,因为“狗是一种动物”。
  • 优先使用组合而非继承:有时使用组合比继承更能让代码灵活。例如,可以让一个类拥有另一个类的实例,而不是继承它。继承使得子类与父类耦合太紧密,而组合允许更松散的关联。

15.总结

继承是面向对象编程的核心概念之一,它允许我们从已有的类中“继承”字段和方法,进而提高代码的复用性。在继承中,我们可以利用super来访问父类成员,使用@Override来重写父类方法,并通过多态来实现动态方法调用。

继承的好处在于它可以帮助我们减少重复代码,但也要小心使用,避免过度依赖继承,特别是要理解父类与子类之间的关系,并遵循设计原则。如果能在适当的时候使用组合,能够获得更加灵活的代码结构。

相关文章:

[Java]继承

1. 什么是继承? 继承是面向对象编程的一种机制,允许一个类(叫做子类)继承另一个类(叫做父类)的属性和方法。也就是说,子类可以“继承”父类的行为(方法)和状态&#xff…...

DeepSeek能下围棋吗?(续)

休息了一下,接着琢磨围棋,其实前面一篇里的规则有个漏洞的,就是邻居关系定义有问题,先回顾一下游戏规则: 游戏规则 定义: 1.数字对,是指两个1到9之间的整数组成的有序集合。可与记为(m,n)&…...

51单片机(STC89C52)开发:点亮一个小灯

软件安装: 安装开发板CH340驱动。 安装KEILC51开发软件:C51V901.exe。 下载软件:PZ-ISP.exe 创建项目: 新建main.c 将main.c加入至项目中: main.c:点亮一个小灯 #include "reg52.h"sbit LED1P2^0; //P2的…...

【数据结构】并查集

1.基本操作 void makeset(){ for(int i1;i<n;i)fa[i]i; }int findd(int x){ while(fa[x]!x)xfa[x]fa[fa[x]]; return x; }void unionn(int x,int y){ int zxfindd(x);int zyfindd(y); if(zx!zy)fa[zy]zx; }2.种类并查集 Parity Game 关押罪犯 [NOIP 2010 提高组] 关押罪…...

基于Rectified Flow FLUX的图像编辑方法 RF-Solver

Diffusion Models专栏文章汇总:入门与实战 前言:现在越来越多的开源模型是基于Rectified Flow,特别是FLUX和HunYuan Video,但是Rectified Flow inversion的性质和之前有所不同,这篇博客解读一下如何使用Rectified Flow对FLUX进行编辑。 目录 RF直接逆向会出现问题 为什R…...

[创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索

关键词&#xff1a; 从系统的角度&#xff0c;麻雀、人体系统、企业系统、软硬件系统、软件系统、通信系统、5G系统是类似的&#xff1a; 都有&#xff1a;内在看不见的规律、外在显性各种现象 都是&#xff1a;输入、处理、输出 都是&#xff1a;静态、要素、组成、结构、组织…...

C语言指针专题三 -- 指针数组

目录 1. 指针数组的核心原理 2. 指针数组与二维数组的区别 3. 编程实例 4. 常见陷阱与防御 5. 总结 1. 指针数组的核心原理 指针数组是一种特殊数组&#xff0c;其所有元素均为指针类型。每个元素存储一个内存地址&#xff0c;可指向不同类型的数据&#xff08;通常指向同…...

Contrastive Imitation Learning

机器人模仿学习中对比解码的一致性采样 摘要 本文中&#xff0c;我们在机器人应用的对比模仿学习中&#xff0c;利用一致性采样来挖掘演示质量中的样本间关系。通过在排序后的演示对比解码过程中&#xff0c;引入相邻样本间的一致性机制&#xff0c;我们旨在改进用于机器人学习…...

Springboot使用AOP时,需不需要引入AspectJ?

Springboot使用AOP时,需不需要引入AspectJ? 在Spring Boot中使用AOP时&#xff0c;是否需要引入AspectJ取决于你选择的具体AOP实现方式。以下是详细分步说明&#xff1a; 1. 默认场景&#xff1a;使用Spring AOP&#xff08;基于代理&#xff09; 不需要引入AspectJ依赖&am…...

使用iis服务器模拟本地资源服务器unityaddressables热更新出错记录

editor中设置了using exculexing 模拟远程加载addressable可以实现资源热更新&#xff0c;build后的软件却没有成功。 iis服务器中mime中需要设置bundle的文件扩展名&#xff0c;时editor成功&#xff0c;build后失败 原因没有设置hash的扩展名&#xff0c;设置后editor和buil…...

17 一个高并发的系统架构如何设计

高并发系统的理解 第一:我们设计高并发系统的前提是该系统要高可用&#xff0c;起码整体上的高可用。 第二:高并发系统需要面对很大的流量冲击&#xff0c;包括瞬时的流量和黑客攻击等 第三:高并发系统常见的需要考虑的问题&#xff0c;如内存不足的问题&#xff0c;服务抖动的…...

MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)

使用 mongosh cd mongsh_bin_path mongosh “mongodb://user:passip:port/db”这样就直接进入了对应的db 直接输入&#xff1a; 这样 role “read_only_role" 就获得了3个 action&#xff0c; 分别是 查询&#xff0c;列举集合&#xff0c;集合元数据查询 P.S: 如果没有 …...

我的AI工具箱Tauri版-Custom3DModelCreationforH2Panel卡通图片2D转绘3D

本教程基于自研的AI工具箱Tauri版进行ComfyUI工作流Custom3DModelCreationforH2Panel卡通图片2D转绘3D。 Custom3DModelCreationforH2Panel卡通图片2D转绘3D 基于先进的SD模型技术&#xff0c;能够将2D动漫图片高效转换为高清的3D图像&#xff0c;满足各种创作需求。通过智能算…...

1 HDFS

1 HDFS 1. HDFS概述2. HDFS架构3. HDFS的特性4. HDFS 的命令行使用5. hdfs的高级使用命令6. HDFS 的 block 块和副本机制6.1 抽象为block块的好处6.2 块缓存6.3 hdfs的文件权限验证6.4 hdfs的副本因子 7. HDFS 文件写入过程&#xff08;非常重要&#xff09;7.1 网络拓扑概念7.…...

14-6-3C++STL的list

&#xff08;一&#xff09;list的插入 1.list.insert(pos,elem);//在pos位置插入一个elem元素的拷贝&#xff0c;返回新数据的位置 #include <iostream> #include <list> using namespace std; int main() { list<int> lst; lst.push_back(10); l…...

GESP2023年12月认证C++六级( 第三部分编程题(2)工作沟通)

参考程序1代码&#xff1a; #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <string> #include <map> #include <iostream> #include <cmath> #include <vector> using name…...

深度学习的应用

目录 一、机器视觉 1.1 应用场景 1.2 常见的计算机视觉任务 1.2.1 图像分类 1.2.2 目标检测 1.2.3 图像分割 二、自然语言处理 三、推荐系统 3.1 常用的推荐系统算法实现方案 四、图像分类实验补充 4.1 CIFAR-100 数据集实验 实验代码 4.2 CIFAR-10 实验代码 深…...

【自学笔记】MySQL的重点知识点-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 MySQL重点知识点MySQL知识点总结一、数据库基础二、MySQL的基本使用三、数据类型四、触发器&#xff08;Trigger&#xff09;五、存储引擎六、索引七、事务处理八、…...

计算机网络之物理层通信基础(信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念)

一、信道 信道是信号的传输媒介&#xff0c;一般用来表示向某一个方向传送信息的介质。信道可以按照不同标准进行分类&#xff1a; 按传输信号分类&#xff1a;可分为模拟信道和数字信道。 按传输介质分类&#xff1a;可分为无线信道和有线信道。无线信道以电磁波为传输介质&…...

C++初阶 -- 初识STL和string类详细使用接口的教程(万字大章)

目录 一、STL 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 二、string类 2.1 string类的基本介绍 2.2 string类的默认成员函数 2.2.1 构造函数 2.2.2 析构函数 2.2.3 赋值运算符重载 2.3 string类对象的容量操作 2.3.1 size和length 2.3.2 capacity 2.3.3 r…...

Cursor 背后的技术栈:从 VS Code 到 AI 集成

引言 在当今快速发展的软件开发领域&#xff0c;开发者工具正在经历一场由人工智能&#xff08;AI&#xff09;驱动的革命。Cursor 作为一款新兴的智能编程助手&#xff0c;凭借其强大的 AI 能力和高效的开发体验&#xff0c;迅速吸引了大量开发者的关注。Cursor 不仅继承了 V…...

ESP32和STM32在处理中断方面的区别

为了通俗地讲解ESP32和STM32在处理中断方面的区别&#xff0c;我们可以把它们想象成两个不同的“智能管家”系统&#xff0c;各自负责管理一个家庭&#xff08;即嵌入式项目&#xff09;的各种任务。我们将重点放在如何处理突发事件&#xff08;即中断&#xff09;上。 ESP32 …...

99.23 金融难点通俗解释:小卖部经营比喻PPI(生产者物价指数)vsCPI(消费者物价指数)

目录 0. 承前1. 简述&#xff1a;价格指数对比2. 比喻&#xff1a;两大指数对比2.1 简单对比2.2 生动比喻 3. 实际应用3.1 价格传导现象 4. 总结5. 有趣的对比6. 数据获取实现代码7. 数据可视化实现代码 0. 承前 本文主旨&#xff1a; 本文使用小卖部比喻PPI和CPI&#xff0c;…...

计算机网络概述

1. 计算机网络的定义 计算机网络是指由多个通过物理介质或无线方式互相连接的计算设备组成的系统。其主要目的是实现数据的传输和资源共享。网络中的计算设备可以包括台式机、笔记本电脑、服务器、手机、打印机、智能设备等。 网络的广义定义 首先要理解“网络”的广义含义。网…...

169 多数元素

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 class Solution { public int majorityElement(int[] nums) { // 存储每个数字的…...

线程配置经验

工作时&#xff0c;时常会遇到&#xff0c;线程相关的问题与解法&#xff0c;本人会持续对开发过程中遇到的关于线程相关的问题及解决记录更新记录在此篇博客中。 目录 一、线程基本知识 1. 线程和进程 二、问题与解法 1. 避免乘法级别数量线程并行 1&#xff09;使用线程池…...

算法随笔_34: 最后一个单词的长度

上一篇:算法随笔_33: 132模式-CSDN博客 题目描述如下: 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a; 输入&am…...

java 正则表达式匹配Matcher 类

Matcher 类 用法 在 Java 中&#xff0c;Matcher 类是用于匹配正则表达式的工具&#xff0c;而 group() 方法是 Matcher 类中的一个重要方法&#xff0c;用于提取匹配结果中的捕获组&#xff08;captured groups&#xff09;。以下是对 group() 方法的详细解释&#xff1a; 1.…...

【Blazor学习笔记】.NET Blazor学习笔记

我是大标题 我学习Blazor的顺序是基于Blazor University&#xff0c;然后实际内容不完全基于它&#xff0c;因为它的例子还是基于.NET Core 3.1做的&#xff0c;距离现在很遥远了。 截至本文撰写的时间&#xff0c;2025年&#xff0c;最新的.NET是.NET9了都&#xff0c;可能1…...

python 使用Whisper模型进行语音翻译

目录 一、Whisper 是什么? 二、Whisper 的基本命令行用法 三、代码实践 四、是否保留Token标记 五、翻译长度问题 六、性能分析 一、Whisper 是什么? Whisper 是由 OpenAI 开源的一个自动语音识别(Automatic Speech Recognition, ASR)系统。它的主要特点是: 多语言…...

pytorch实现循环神经网络

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 PyTorch 提供三种主要的 RNN 变体&#xff1a; nn.RNN&#xff1a;最基本的循环神经网络&#xff0c;适用于短时依赖任务。nn.LSTM&#xff1a;长短时记忆网络&#xff0c;适用于长序列数据&#xff0c;能有效解决…...

侯捷 C++ 课程学习笔记:深入理解 C++ 核心技术与实战应用

目录 引言 第一章&#xff1a;C 基础回顾 1.1 C 的历史与发展 1.2 C 的核心特性 1.3 C 的编译与执行 第二章&#xff1a;面向对象编程 2.1 类与对象 2.2 构造函数与析构函数 2.3 继承与多态 第三章&#xff1a;泛型编程与模板 3.1 函数模板 3.2 类模板 3.3 STL 容器…...

大厂面试题备份20250131

20250131 模型压缩怎么做&#xff1f;除了知识蒸馏 模型压缩是为了减少深度学习模型的计算和存储需求&#xff0c;提高推理效率。除了知识蒸馏&#xff0c;常见的模型压缩方法包括&#xff1a; 1. 剪枝&#xff08;Pruning&#xff09; 非结构化剪枝&#xff08;Unstructur…...

(三)QT——信号与槽机制——计数器程序

目录 前言 信号&#xff08;Signal&#xff09;与槽&#xff08;Slot&#xff09;的定义 一、系统自带的信号和槽 二、自定义信号和槽 三、信号和槽的扩展 四、Lambda 表达式 总结 前言 信号与槽机制是 Qt 中的一种重要的通信机制&#xff0c;用于不同对象之间的事件响…...

玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…...

从0开始,来看看怎么去linux排查Java程序故障

一&#xff0c;前提准备 最基本前提&#xff1a;你需要有liunx环境&#xff0c;如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后&#xff0c;你还需要安装jdk和配置环境变量 1. 安装JDK&#xff08;以OpenJDK 17为例&#xff09; 下载JDK…...

Java实现LFU缓存策略实战

LFU算法原理在Java中示例实现集成Caffeine的W-TinyLFU策略缓存实战总结LFU与LRU稍有不同,LFU是根据数据被访问的频率来决定去留。尽管它考虑了数据的近期使用,但它不会区分数据的首次访问和后续访问,淘汰那些访问次数最少的数据。 这种缓存策略主要用来处理以下场景: 数据…...

LeetCode--84. 柱状图中最大的矩形【单调栈】

84. 柱状图中最大的矩形 正文 题目如下 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 这道题暴力很简单&#xff0c;但是时间复杂度是O(N^2)&#xf…...

感悟人生路

匆匆复匆匆&#xff0c;新春时光沙漏里&#xff0c;过了又来&#xff0c;只是那时和此时。累了&#xff0c;行过百公里&#xff0c;灯光交汇处&#xff0c;都是向往幸福之所。一路长虹&#xff0c;速度跟上节奏&#xff0c;福祉盈门&#xff0c;出入平安。​ 跨越时空&#xff…...

Autogen_core源码:_agent_instantiation.py

目录 _agent_instantiation.py代码代码解释代码示例示例 1&#xff1a;使用 populate_context 正确设置上下文示例 2&#xff1a;尝试在上下文之外调用 current_runtime 和 current_agent_id示例 3&#xff1a;模拟 AgentRuntime 使用 AgentInstantiationContext _agent_instan…...

开源智慧园区管理系统如何重塑企业管理模式与运营效率

内容概要 在如今快速发展的商业环境中&#xff0c;企业面临着日益复杂的管理挑战。开源智慧园区管理系统应运而生&#xff0c;旨在通过技术创新来应对这些挑战。它不仅是一个简单的软件工具&#xff0c;而是一个全面整合大数据、物联网和智能化功能的综合平台&#xff0c;为企…...

网络工程师 (9)文件管理

一、树形目录结构 &#xff08;一&#xff09;定义与构成 树形目录结构由一个根目录和若干层子文件夹&#xff08;或称为子目录&#xff09;组成&#xff0c;它像一棵倒置的树。这棵树的根称为根文件夹&#xff08;也叫根目录&#xff09;&#xff0c;从根向下&#xff0c;每一…...

Java小白入门教程:内置数据类型(四类八种)和引用数据类型

目录 一、内置数据类型&#xff08;四类八种&#xff09; 1. 整数类型&#xff08;四种子类型&#xff09; 2. 浮点类型&#xff08;两种子类型&#xff09; 3. 字符类型&#xff08;一种子类型&#xff09; 4. 布尔类型&#xff08;一种子类型&#xff09; 二、引用数据类…...

pytorch图神经网络处理图结构数据

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是一类能够处理图结构数据的深度学习模型。图结构数据由节点&#xff08;vertices&#xff09;和边&#xff08;edges&#xff09;组成&a…...

CRC校验详解

CRC校验即循环冗余校验(Cyclic Redundancy Check),是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。首先看两个概念,后续会用到。 模2除法:也叫模2运算,就是结果除以2后取余数。模2除法每一位除的结果不影响其它位,即不向上一位借位,所以实际…...

使用where子句筛选记录

默认情况下,SearchCursor将返回一个表或要素类的所有行.然而在很多情况下,常常需要某些条件来限制返回行数. 操作方法: 1.打开IDLE,加载先前编写的SearchCursor.py脚本 2.添加where子句,更新SearchCursor()函数,查找记录中有<>文本的<>字段 with arcpy.da.Searc…...

人工智能导论--第1章-知识点与学习笔记

请根据教材内容&#xff0c;完成进行下面的作业任务。必须包含有教材的具体内容&#xff0c;不能是生成式AI系统的生成内容。 参考教材1.1节的内容介绍&#xff0c;谈谈你对“智能”的认识。思维能力是智能的重要特征之一&#xff0c;结合教材1.1.2节内容&#xff0c;从思维的…...

半导体SAP管理系统:数字化转型的驱动力

在当今全球科技竞争日益激烈的背景下&#xff0c;半导体行业作为信息技术的基石&#xff0c;其生产效率、质量控制和成本优化直接关系到企业的市场竞争力和可持续发展。随着数字化转型的深入&#xff0c;半导体企业纷纷寻求高效、智能的管理系统以提升运营效率。SAP管理系统&am…...

Cursor 简介:AI 如何改变编程体验

在软件开发领域&#xff0c;效率和质量始终是开发者们追求的目标。随着人工智能技术的飞速发展&#xff0c;编程工具也在不断进化&#xff0c;Cursor 便是这一趋势下的产物。它不仅仅是一个代码编辑器&#xff0c;更是一个集成了 AI 能力的智能编程助手&#xff0c;旨在通过 AI…...

苯乙醇苷类化合物的从头生物合成-文献精读108

Complete pathway elucidation of echinacoside in Cistanche tubulosa and de novo biosynthesis of phenylethanoid glycosides 管花肉苁蓉中松果菊苷全生物合成途径解析及苯乙醇苷类化合物的从头生物合成 摘要 松果菊苷&#xff08;ECH&#xff09;是最具代表性的苯乙醇苷…...