java——继承

目录

一. 继承的基本概念

二. 继承的语法

三. 继承的核心规则

1.单继承:

2.子类继承父类后,除私有的不支持继承、构造方法不支持继承。其它的全部会继承。

①访问权限:

②构造方法:

3.一个类没有显示继承任何类时,默认继承java.lang.Object类。

(1).为什么需要隐式继承Object类?

(2).验证隐式继承的示例

(3).特殊情况说明

(4).隐式继承的底层逻辑

(5).总结

四. 继承的示例

父类 Animal

子类 Cat

测试类

五、继承中变量的访问特点

1.情况 1:完整代码(子类有成员变量 + 局部变量)

2.情况 2:去掉局部变量 age=30

3.情况 3:去掉子类成员变量 age 和局部变量 age

4.总结表格

5.关键规则

六. super 关键字

1. super 关键字用法及与 this 关键字对比

1.1 this 与 super 关键字概念

1.2 this 与 super 关键字具体用法对比

1.3 代码示例及结果

七、继承中构造方法的访问特点

1.代码示例及结果

2.父类只有带参构造方法的处理办法

八、继承中成员方法的访问特点

情况一:子类有该方法,父类无该方法

情况二:子类无该方法,父类有该方法

情况三:子类和父类都有该方法(方法重写)

情况四:子类和父类都无该方法

九、继承的用途

十、方法重写(Override)

十一、 继承的注意事项

十二、 继承与接口的区别

十三. 总结

在 Java 中,继承(Inheritance) 是面向对象编程(OOP)的核心特性之一,允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法,从而实现代码复用和逻辑分层。以下是关于 Java 继承的详细讲解:


一. 继承的基本概念

  • 父类(Superclass):被继承的类,包含通用的属性和方法。

  • 子类(Subclass):继承父类的类,可以扩展或修改父类的功能。

  • 核心思想:子类“是一个(is-a)”父类,例如 Cat 是 Animal

继承相关的术语:当B类继承A类时

A类称为:父类、超类、基类、superclass

B类称为:子类、派生类、subclass

  1. 继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
  2. 继承是指在原有类的基础上,进行功能扩展,创建新的类型。
  3. 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
  4. JAVA中类只有单继承,没有多继承!
  5. 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
  6. extends的意思是“扩展”,子类是父类的扩展。

二. 继承的语法

使用 extends 关键字实现继承:

class ParentClass {// 父类的属性和方法
}class ChildClass extends ParentClass {// 子类可以添加新的属性和方法,或重写父类方法
}

三. 继承的核心规则

1.单继承

Java 不支持多继承(一个子类只能有一个直接父类)。

语法错误:java不支持多继承,不能同时直接继承多个类。只能“直接”继承1个类 

重复的类:` C `
类不能扩展多个类

解决方法:Java不支持多继承,但支持多重继承(多层继承)。

//Java 支持多层继承(链式继承)
class A {}
class B extends A {}
class C extends B {}  // C 间接继承 A

    2.子类继承父类后,除私有的不支持继承、构造方法不支持继承。其它的全部会继承。

    ①访问权限:

    • public 和 protected 成员:子类可以继承父类的publicprotected成员(字段和方法),并直接访问它们。

    • private 成员子类无法继承父类的private成员。若需操作父类的private成员,需通过父类提供的publicprotected方法(如getter/setter)。

    • 默认权限(包级私有):若子类与父类在同一个包内,子类可以继承默认权限的成员;否则不能。

    示例

    class Parent {private int privateVar;      // 不可继承protected int protectedVar;  // 可继承public int publicVar;        // 可继承private void privateMethod() {}     // 不可继承protected void protectedMethod() {} // 可继承public void publicMethod() {}       // 可继承
    }class Child extends Parent {void accessMembers() {// System.out.println(privateVar);     // 编译错误System.out.println(protectedVar);     // 允许System.out.println(publicVar);        // 允许// privateMethod();                    // 编译错误protectedMethod();                    // 允许publicMethod();                       // 允许}
    }

    ②构造方法:

    子类构造方法默认调用父类的无参构造方法(通过 super())。 如果父类没有无参构造方法,子类必须显式调用父类的有参构造方法(super(参数))。

    3.一个类没有显示继承任何类时,默认继承java.lang.Object类。

    在Java中,如果一个类没有显式继承其他类(即没有使用extends关键字),它会自动隐式继承java.lang.Object。这是Java语言设计的核心机制,确保所有类都有一个共同的根类,形成统一的类型体系。


    (1).为什么需要隐式继承Object类?

    1. 统一类型系统:所有对象(包括数组)都直接或间接继承Object,这使得Object可以作为通用类型使用(如泛型容器List<Object>)。

    2. 提供基础方法Object类定义了对象的基本行为方法,如:

      • toString():返回对象的字符串表示。

      • equals():比较对象是否相等。

      • hashCode():返回对象的哈希码。

      • getClass():获取对象的运行时类信息。

      • clone():创建对象的副本。

      • finalize():垃圾回收前的清理操作(已弃用)。


    (2).验证隐式继承的示例

    示例1:自定义空类

    // 没有显式继承任何类
    public class MyClass {  // 空类
    }public class Main {public static void main(String[] args) {MyClass obj = new MyClass();// 调用Object类的方法System.out.println(obj.toString());  // 输出类似 MyClass@1b6d3586System.out.println(obj.getClass());  // 输出 class MyClass}
    }

    示例2:通过反射验证父类

    import java.lang.reflect.Modifier;public class Main {public static void main(String[] args) {Class<MyClass> clazz = MyClass.class;Class<?> superClass = clazz.getSuperclass();System.out.println("MyClass的父类是: " + superClass.getName());  // 输出: MyClass的父类是: java.lang.Object}
    }

    (3).特殊情况说明

    1. 接口不继承Object

      • 接口(interface)虽然不能显式继承Object,但实现接口的类仍然继承Object

      • 接口中声明的方法(如toString())默认是public abstract的,而Object中的同名方法是具体实现,二者不冲突。

    2. 数组类型

      • 所有数组类型(如int[]String[])也隐式继承Object

      int[] arr = new int[5];
      System.out.println(arr instanceof Object);  // 输出 true
    3. 枚举类

      • 枚举类(enum)隐式继承java.lang.Enum,而Enum本身继承Object,因此枚举类间接继承Object


    (4).隐式继承的底层逻辑

    当编译以下代码时:

    public class MyClass { }

    编译器会自动补全继承关系,等效于:

    public class MyClass extends java.lang.Object { }

    (5).总结

    场景继承关系
    类未显式继承任何父类默认继承java.lang.Object
    类显式继承其他类直接继承指定的父类,间接继承Object(除非父类链中断)
    接口(interface不继承Object,但实现类仍继承Object

    通过隐式继承Object,Java确保了所有对象的行为一致性和可操作性,这是实现多态、反射、垃圾回收等高级特性的基础。


    四. 继承的示例

    父类 Animal
    public class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}public void eat() {System.out.println(name + " is eating.");}
    }
    子类 Cat
    public class Cat extends Animal {public Cat(String name, int age) {super(name, age); // 调用父类构造方法}// 子类扩展方法public void meow() {System.out.println(name + " says meow!");}// 重写父类方法(方法重写/Override)@Overridepublic void eat() {System.out.println(name + " is eating fish.");}
    }
    测试类
    public class Test {public static void main(String[] args) {Cat cat = new Cat("Tom", 2);cat.eat();  // 输出:Tom is eating fish.cat.meow(); // 输出:Tom says meow!}
    }

    五、继承中变量的访问特点

    在子类方法中访问一个变量

    最先在子类局部范围找,如果没有就在子类成员范围找,最后在父类成员范围找,如果都没有就报错(不考虑父亲的父亲...)。

    1.情况 1:完整代码(子类有成员变量 + 局部变量)

    例如:创建一个父类Fu

    public class Fu {public int age = 10; // 父类成员变量
    }

    创建一个子类Zi

    public class Zi extends Fu {public int heigth = 180;    // 子类独有变量public int age = 20;        // 隐藏父类的同名变量,如果没有这句,和下面那句,输出的是10public void show() {int age = 30;           // 局部变量(优先级最高),如果没有这句,输出的是20System.out.println(age); // 输出局部变量System.out.println(heigth);}
    }

    创建一个测试类Test

    public class Test {public static void main(String[] args) {Zi z = new Zi();z.show(); // 调用方法}
    }

    运行结果:

    解释:
    局部变量 age=30 优先级最高,直接输出;heigth 访问子类成员变量。

    2.情况 2:去掉局部变量 age=30

    父类 Fu

    public class Fu {public int age = 10; // 父类成员变量
    }

    子类 Zi

    public class Zi extends Fu {public int heigth = 180;public int age = 20;        // 隐藏父类的同名变量public void show() {// int age = 30;        // 注释掉局部变量System.out.println(age); // 访问子类成员变量System.out.println(heigth);}
    }

    测试类 Test(同上)

    public class Test {public static void main(String[] args) {Zi z = new Zi();z.show();}
    }

    运行结果:

    解释:
    没有局部变量时,访问子类成员变量 age=20。

    3.情况 3:去掉子类成员变量 age 和局部变量 age

    父类 Fu

    public class Fu {public int age = 10; // 父类成员变量
    }

    子类 Zi

    public class Zi extends Fu {public int heigth = 180;// public int age = 20;      // 注释掉子类成员变量public void show() {// int age = 30;         // 注释掉局部变量System.out.println(age); // 访问父类成员变量System.out.println(heigth);}
    }

    测试类 Test(同上)

    public class Test {public static void main(String[] args) {Zi z = new Zi();z.show();}
    }

    运行结果:

    解释:
    子类和局部都没有 age 时,向上查找父类变量 age=10。

    4.总结表格

    情况代码变化输出结果访问顺序
    子类有成员变量 + 局部变量保留所有变量30,180局部 → 子类 → 父类
    仅子类有成员变量去掉局部变量20,180子类 → 父类
    仅父类有成员变量去掉子类成员变量和局部变量10,180父类

    5.关键规则

    1. 就近原则:优先访问离当前作用域最近的变量(局部 > 子类 > 父类)。

    2. 显式访问父类变量:若需要强制访问父类变量,使用 super.age

    3. 变量隐藏:子类定义同名变量会隐藏父类变量,但不会覆盖(父类变量仍存在)。

    4. 编译报错:如果局、子类、父类都没有 age,编译报错。


    六. super 关键字

    • 作用:访问父类的成员(属性、方法、构造方法)。

    1. super 关键字用法及与 this 关键字对比

    1.1 this 与 super 关键字概念

    • this 关键字:代表本类对象的引用,指向调用该方法的对象。通常在当前类里使用,所以常说它代表本类对象的引用。
    • super 关键字:代表父类存储空间的标识,可理解为父类对象引用。

    1.2 this 与 super 关键字具体用法对比

    关键字访问成员变量访问构造方法访问成员方法
    thisthis.成员变量:用于访问本类成员变量this(...):用于访问本类构造方法this.成员方法(...):用于访问本类成员方法
    supersuper.成员变量:用于访问父类成员变量super(...):用于访问父类构造方法super.成员方法(...):用于访问父类成员方法

    1.3 代码示例及结果

    // 父类 Fu
    public class Fu {public int age = 10;
    }// 子类 Zi
    public class Zi extends Fu {public int age = 20;public void show() {int age = 30;System.out.println(age); // 输出 30,访问局部变量 ageSystem.out.println(this.age);    // 访问本类中的成员变量 ageSystem.out.println(super.age); // 访问 Fu 类中的成员变量 age}
    }// 测试类 Test
    public class Test {public static void main(String[] args) {Zi z = new Zi();z.show();}
    }
    

    运行结果

    七、继承中构造方法的访问特点

    子类中所有的构造方法默认都会访问父类中无参的构造方法。原因在于子类会继承父类的数据,可能还会使用这些数据,所以在子类初始化之前,必须先完成父类数据的初始化。

    每个子类构造方法的第一条语句默认都是 super()

    1.代码示例及结果

    创建一个父类Fu

    // 父类 Fu
    public class Fu {public Fu() {System.out.println("Fu 中无参构造方法被调用");}public Fu(int age) {System.out.println("Fu 中带参构造方法被调用");}
    }

    创建一个子类Zi

    // 子类 Zi
    public class Zi extends Fu {public Zi() {// super(); 即使不写,默认也会有System.out.println("Zi 中无参构造方法被调用");}public Zi(int age) {// super(); 即使不写,默认也会有System.out.println("Zi 中带参构造方法被调用");}
    }

    测试:Test

    // 测试类 Test
    public class Test {public static void main(String[] args) {Zi z = new Zi();System.out.println("-------------------");Zi zi = new Zi(18);}
    }

    运行结果:

    2.父类只有带参构造方法的处理办法

    如果父类中没有无参构造方法,只有带参构造方法,有以下两种解决办法:

    • 使用 super 关键字显式调用父类带参构造方法:在子类构造方法里,通过 super(参数) 的形式显式调用父类的带参构造方法。
    • 在父类中提供无参构造方法:为父类添加一个无参构造方法,这样子类构造方法就可以默认调用它。推荐采用这种方式,能避免很多不必要的错误。

    例如:创建一个父类Fu

    // 父类 Fu
    public class Fu {public Fu(int age) {System.out.println("Fu 中带参构造方法被调用");}
    }
     
    

    创建一个子类Zi

    // 子类 Zi
    public class Zi extends Fu {public Zi() {super(18);System.out.println("Zi 中无参构造方法被调用");}public Zi(int age) {super(18);System.out.println("Zi 中带参构造方法被调用");}
    }

    测试:Test

    // 测试类 Test
    public class Test {public static void main(String[] args) {Zi z = new Zi();System.out.println("-------------------");Zi zi = new Zi(18);}
    }

    运行结果:

    八、继承中成员方法的访问特点

    通过子类对象访问一个方法:

    先子类成员范围找,如果找不到就在父类成员范围找,如果都没有就报错(不考虑父亲的父亲...)

    情况一:子类有该方法,父类无该方法

    当子类中定义了某个方法,而父类中没有定义该方法时,子类对象调用此方法会直接执行子类中的实现。

    示例代码:

    // 父类
    class Fu {// 父类没有定义 method 方法
    }// 子类
    class Zi extends Fu {public void method() {System.out.println("Zi 中 method() 方法被调用");}
    }// 测试类
    public class Test {public static void main(String[] args) {Zi z = new Zi();z.method(); }
    }

    运行结果为:

    解释:

    因为在子类对象 z 调用 method 方法时,会先在子类成员范围查找,找到了该方法,所以直接执行子类的 method 方法。

    情况二:子类无该方法,父类有该方法

    若子类中没有定义某个方法,但父类中定义了,子类对象调用此方法会执行父类中的实现。

    示例代码:

    // 父类
    class Fu {public void show() {System.out.println("Fu 中 show() 方法被调用");}
    }// 子类
    class Zi extends Fu {// 子类没有定义 show 方法
    }// 测试类
    public class Test {public static void main(String[] args) {Zi z = new Zi();z.show(); }
    }

    运行结果为:

    解释:

    当子类对象 z 调用 show 方法时,在子类成员范围未找到该方法,就会到父类成员范围查找,找到后执行父类的 show 方法。

    情况三:子类和父类都有该方法(方法重写)

    当子类和父类都定义了相同签名(方法名、参数列表和返回类型相同)的方法时,这就是方法重写,子类对象调用该方法会执行子类重写后的实现。若需要调用父类的原始方法,可以使用 super 关键字。

    示例代码:

    // 父类
    class Fu {public void show() {System.out.println("Fu 中 show() 方法被调用");}
    }// 子类
    class Zi extends Fu {@Overridepublic void show() {super.show(); System.out.println("Zi 中 show() 方法被调用");}
    }// 测试类
    public class Test {public static void main(String[] args) {Zi z = new Zi();z.show(); }
    }

    运行结果为:

    解释:

    子类对象 z 调用 show 方法时,先在子类成员范围找到重写后的 show 方法。在子类的 show 方法里,通过 super.show() 调用了父类的 show 方法,所以先输出父类 show 方法的信息,接着输出子类 show 方法的信息。

    情况四:子类和父类都无该方法

    如果子类和父类中都没有定义某个方法,子类对象调用该方法会导致编译错误。

    // 父类
    class Fu {// 父类没有定义 test 方法
    }// 子类
    class Zi extends Fu {// 子类也没有定义 test 方法
    }// 测试类
    public class Test {public static void main(String[] args) {Zi z = new Zi();// 下面这行代码会编译报错// z.test(); }
    }

    结果及解释

    由于 test 方法在子类和父类中都未定义,当尝试调用 z.test() 时,编译器会报错,提示找不到该方法。

    综上所述,在继承中通过子类对象访问成员方法时,Java 会按照先子类成员范围、再父类成员范围的顺序查找方法,若都找不到则会报错。

    九、继承的用途

    1. 代码复用:子类可以直接使用父类的属性和方法。

    2. 扩展功能:子类可以添加新的属性和方法。

    3. 多态实现:子类可以重写父类方法,实现多态行为。

    十、方法重写(Override)

    🟩回顾方法重载 overload
    * 1. 什么时候考虑使用方法重载?
    *      在一个类中,如果功能相似,可以考虑使用方法重载。
    *      这样做的目的是:代码美观,方便编程。
    *
    * 2. 当满足什么条件的时候构成方法重载?
    *      条件1:在同一个类中。
    *      条件2:相同的方法名。
    *      条件3:不同的参数列表:类型,个数,顺序
    *
    * 3. 方法重载机制属于编译阶段的功能。(方法重载机制是给编译器看的。)
    *
    * 🟦方法覆盖/override/方法重写/overwrite
    * 1. 什么时候考虑使用方法重写?
    *      当从父类中继承过来的方法,无法满足子类的业务需求时。
    *
    * 2. 当满足什么条件的时候,构成方法重写?
    *      条件1:方法覆盖发生在具有继承关系的父子类之间。
    *      条件2:具有相同的方法名(必须严格一样)
    *      条件3:具有相同的形参列表(必须严格一样)
    *      条件4:具有相同的返回值类型(可以是子类型)
    *
    * 3. 关于方法覆盖的细节:
    *      3.1 当子类将父类方法覆盖之后,将来子类对象调用方法的时候,一定会执行重写之后的方法。
    *      3.2 在java语言中,有一个注解,这个注解可以在编译阶段检查这个方法是否是重写了父类的方法。
    *          @Override注解是JDK5引入,用来标注方法,被标注的方法必须是重写父类的方法,如果不是重写的方法,编译器会报错。
    *          @Override注解只在编译阶段有用,和运行期无关。
    *      3.3 如果返回值类型是引用数据类型,那么这个返回值类型可以是原类型的子类型
    *      3.4 访问权限不能变低,可以变高。
    *      3.5 抛出异常不能变多,可以变少。(后面学习异常的时候再说。)
    *      3.6 私有的方法,以及构造方法不能继承,因此他们不存在方法覆盖。
    *      3.7 方法覆盖针对法的是实例方法。和静态方法无关。(讲完多态再说。)
    *      3.8 方法覆盖针对的是实例方法。和实例变量没有关系。
    
    • 定义:子类重新实现父类的方法。

    • 规则

      • 方法名、参数列表和返回类型必须与父类方法相同。

      • 访问权限不能比父类方法更严格(如父类是 public,子类不能是 private)。

      • 使用 @Override 注解显式声明重写(非强制,但推荐)。

    十一、 继承的注意事项

    1. 避免过度继承:继承层次过深会导致代码复杂度增加。

    2. 优先使用组合:如果逻辑关系不是“is-a”,应使用组合(Composition)而非继承。

    3. final 类:被 final 修饰的类不能被继承。

    十二、 继承与接口的区别

    特性继承接口(Interface)
    关系“is-a” 关系(父子关系)“can-do” 关系(能力定义)
    多继承不支持支持(一个类可实现多个接口)
    实现方式extends 关键字implements 关键字
    成员类型可以有属性、具体方法、构造方法只能有抽象方法和默认方法

    十三. 总结

    • 继承 是 Java 实现代码复用和多态的核心机制。

    • 子类通过 extends 继承父类,可重写方法或扩展功能。

    • 合理使用继承和组合,避免设计复杂的类层次结构。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9676.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    大数据相关职位介绍之二(数据治理,数据库管理员, 数据资产管理师,数据质量专员)

    大数据相关职位介绍之二&#xff08;数据治理&#xff0c;数据库管理员&#xff0c; 数据资产管理师&#xff0c;数据质量专员&#xff09; 文章目录 大数据相关职位介绍之二&#xff08;数据治理&#xff0c;数据库管理员&#xff0c; 数据资产管理师&#xff0c;数据质量专员…

    《使用通道 Transformer 进行多尺度特征融合,引导热图像超分辨率》学习笔记

    paper&#xff1a;Multi-Scale Feature Fusion using Channel Transformers for Guided Thermal Image Super Resolution 目录 摘要 1、介绍 2、相关工作 2.1 可见光图像超分辨率与恢复 2.2 热成像超分辨率 2.3 引导式热成像超分辨率 3、方法 3.1 网络架构&#xff08…

    7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)

    目录 0. 承前1. 深度金融研报准备2. 核心AI函数代码讲解2.1 函数概述2.2 输入参数2.3 主要流程2.4 异常处理2.5 清理工作2.7 get_ai_weights函数汇总 3. 汇总代码4. 反思4.1 不足之处4.2 提升思路 5. 启后 0. 承前 本篇博文是对前两篇文章&#xff0c;链接: 5. 马科维茨资产组…

    推动知识共享的在线知识库实施与优化指南

    内容概要 在当今迅速发展的数字化时代&#xff0c;在线知识库的实施显得尤为重要。它不仅为企业提供了高效的信息存储与共享平台&#xff0c;还能够有效促进团队成员之间的协作与知识传递。通过集中管理企业内的各类知识资源&#xff0c;在线知识库帮助员工快速查找所需信息&a…

    51单片机开发:串口通信

    实验目标&#xff1a;电脑通过串口将数据发送给51单片机&#xff0c;单片机原封不动地将数据通过串口返送给电脑。 串口的内部结构如下图所示&#xff1a; 串口配置如下&#xff1a; TMOD | 0X20 ; //设置计数器工作方式 2 SCON 0X50 ; //设置为工作方式 1 PCON 0X80 ; …

    【电工基础】2.低压带电作业定义,范围,工作要求,电工基本工具

    一。低压带电作业 1.低压带电作业定义 低压带电作业是指在不停电的低压设备或低压线路上的工作。对于一些可以不停电的工作&#xff0c;没有偶然触及带电部分的危险工作&#xff0c;或作业人员使用绝缘辅助安全用具直接接触带电体及在带电设备外壳上的工作&#xff0c;均可进行…

    C++ 中用于控制输出格式的操纵符——setw 、setfill、setprecision、fixed

    目录 四种操纵符简要介绍 setprecision基本用法 setfill的基本用法 fixed的基本用法 setw基本用法 以下是一些常见的用法和示例&#xff1a; 1. 设置字段宽度和填充字符 2. 设置字段宽度和对齐方式 3. 设置字段宽度和精度 4. 设置字段宽度和填充字符&#xff0c;结合…

    MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询

    介绍 在开发商品模块时&#xff0c;通常使用分表的方式进行查询以及关联。在通过表连接的方式进行查询。每个商品都有不同的分类&#xff0c;每个不同分类下面都有商品规格可以选择&#xff0c;每个商品分类对应商品规格都有自己的价格和库存。在实际的开发中应该给这些表进行…

    2025春晚刘谦魔术揭秘魔术过程

    2025春晚刘谦魔术揭秘魔术过程 首先来看全过程 将杯子&#xff0c;筷子&#xff0c;勺子以任意顺序摆成一排 1.筷子和左边物体交换位置 2.杯子和右边物体交换位置 3.勺子和左边物体交换位置 最终魔术的结果是右手出现了杯子 这个就是一个简单的分类讨论的问题。 今年的魔术…

    具身智能研究报告

    参考&#xff1a; &#xff08;1&#xff09;GTC大会&Figure&#xff1a;“具身智能”奇点已至 &#xff08;2&#xff09;2024中国具身智能创投报告 &#xff08;3&#xff09;2024年具身智能产业发展研究报告 &#xff08;4&#xff09;具身智能行业深度&#xff1a;发展…

    将ollama迁移到其他盘(eg:F盘)

    文章目录 1.迁移ollama的安装目录2.修改环境变量3.验证 背景&#xff1a;在windows操作系统中进行操作 相关阅读 &#xff1a;本地部署deepseek模型步骤 1.迁移ollama的安装目录 因为ollama默认安装在C盘&#xff0c;所以只能安装好之后再进行手动迁移位置。 # 1.迁移Ollama可…

    VPR概述、资源

    SOTA网站&#xff1a; Visual Place Recognition | Papers With Code VPR&#xff08;Visual Place Recognition&#xff09; 是计算机视觉领域的一项关键任务&#xff0c;旨在通过图像匹配和分析来识别场景或位置。它的目标是根据视觉信息判断某个场景是否与数据库中的场景匹…

    (Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

    源码 论文 下载地址&#xff1a; ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文&#xff09;https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…

    MySQL中的读锁与写锁:概念与作用深度剖析

    MySQL中的读锁与写锁&#xff1a;概念与作用深度剖析 在MySQL数据库的并发控制机制中&#xff0c;读锁和写锁起着至关重要的作用。它们是确保数据在多用户环境下能够正确、安全地被访问和修改的关键工具。 一、读锁&#xff08;共享锁&#xff09;概念 读锁&#xff0c;也称为…

    用HTML、CSS和JavaScript实现庆祝2025蛇年大吉(附源码)

    用HTML、CSS和JavaScript庆祝2025蛇年大吉 在这个数字化时代&#xff0c;网页设计不仅仅是为了展示信息&#xff0c;更是传达情感和文化的一种方式。2025年将是蛇年&#xff0c;许多人希望通过各种方式庆祝这一重要的时刻。在这篇文章中&#xff0c;我们将一起学习如何使用HTM…

    STM32标准库移植RT-Thread nano

    STM32标准库移植RT-Thread Nano 哔哩哔哩教程链接&#xff1a;STM32F1标准库移植RT_Thread Nano 移植前的准备 stm32标准库的裸机代码&#xff08;最好带有点灯和串口&#xff09;RT-Thread Nano Pack自己的开发板 移植前的说明 本人是在读学生&#xff0c;正在学习阶段&a…

    Unity 粒子特效在UI中使用裁剪效果

    1.使用Sprite Mask 首先建立一个粒子特效在UI中显示 新建一个在场景下新建一个空物体&#xff0c;添加Sprite Mask组件&#xff0c;将其的Layer设置为UI相机渲染的UI层&#xff0c; 并将其添加到Canvas子物体中&#xff0c;调整好大小&#xff0c;并选择合适的Sprite&#xff…

    JVM栈溢出线上环境排查

    #查看当前Linux系统进程ID、线程ID、CPU占用率&#xff08;-eo后面跟想要展示的列&#xff09; ps H -eo pid,tid,%cpups H -eo pid,tid,%cpu |grep tid #使用java jstack 查看进程id下所有线程id的情况 jstack pid 案例2 通过jstack 排查死锁问题 #启动java代码 jstack 进…

    【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章

    欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

    (2)SpringBoot自动装配原理简介

    SpringBoot自动装配 这里写目录标题 SpringBoot自动装配启动器主程序自定义扫描包SpringBootApplicationSpringBootConfigurationEnableAutoConfigurationAutoConfigurationPackageImport({AutoConfigurationImportSelector.class})选择器AutoConfigurationEntrygetCandidateCo…