Java类 继承

news2024/11/14 17:49:59

 

Java是一种面向对象的编程语言,类是Java中最基本的编程单元。一个类可以包含变量、方法和构造函数等。类的定义需要使用关键字class,例如:

```
public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public void sayHello() {
        System.out.println("Hello, my name is " + name + ", and I am " + age + " years old.");
    }
    
    // getters and setters for name and age
}
```

上面的代码定义了一个名为Person的类,包含了私有变量name和age,以及构造函数和公有方法sayHello。构造函数用来初始化对象的状态,而sayHello方法用来输出对象的信息。除此之外,还可以为类定义公有和私有方法,访问控制修饰符包括public、private、protected和默认(没有修饰符)等。

Java类

1. 类的定义

1.1 类的基本概念

1.1.1 类的基本概念

类是Java中最基本的代码单元,它是一种用户自定义的数据类型,用于封装数据和方法。类可以看作是一个模板或蓝图,描述了一类对象的属性和行为。在Java中,类的定义通常包括类名、类的成员变量、类的方法等。其中,类名是唯一的,并且必须与文件名相同。类的成员变量是描述类的属性的变量,可以是基本数据类型或其他类的对象。类的方法是描述类的行为的函数,可以访问类的成员变量和其他类的对象。我们可以通过创建对象来实例化一个类,即在内存中分配空间来存储该类的实例,并调用其方法来操作实例的属性和行为。例如,下面是一个简单的Java类定义示例:

public class Person {
    // 成员变量
    private String name;
    private int age;
    
    // 构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // 成员方法
    public void sayHello() {
        System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");
    }
}

在上面的示例中,我们定义了一个名为Person的类,它有两个成员变量name和age,一个构造方法Person(String name, int age),和一个成员方法sayHello()。我们可以通过以下代码创建一个Person对象,并调用其sayHello()方法:

Person person = new Person("Tom", 18);
person.sayHello();

输出结果为:

Hello, my name is Tom, I'm 18 years old.

通过上面的示例,我们可以看到类的定义是Java程序的基础,它提供了一种封装和抽象的方式来组织代码,使得程序更加清晰和易于维护。

1.2 类的语法结构

1.2.1 类的成员变量

类的成员变量定义在类的花括号内,与方法定义平级。成员变量可以是任何数据类型,包括Java中的基本数据类型和自定义数据类型。定义成员变量时需要指定访问权限修饰符,常用的有public、private和protected。访问权限修饰符的作用是控制成员变量的访问范围,保证数据的安全性和封装性。

1.2.2 类的方法

类的方法定义在类的花括号内,与成员变量定义平级。方法可以是任何数据类型,包括Java中的基本数据类型和自定义数据类型。定义方法时需要指定访问权限修饰符和方法返回值类型。访问权限修饰符的作用与成员变量相同,方法返回值类型指定方法返回的数据类型,如果方法不返回任何数据,则返回值类型为void。方法可以有参数列表,参数列表中指定方法的输入参数,参数列表可以为空。

1.2.3 类的构造方法

类的构造方法是一种特殊的方法,用于创建类的对象。构造方法的名称必须与类名相同,没有返回值类型,可以有参数列表。在创建类的对象时,会自动调用构造方法来完成对象的初始化。如果没有定义构造方法,则系统会自动生成一个默认的构造方法,该方法没有参数,也没有任何操作。

1.2.4 类的静态成员

类的静态成员指的是类的成员变量和方法,它们被static关键字修饰。静态成员可以直接通过类名来访问,不需要创建类的对象。静态成员在类加载时就已经被分配了内存空间,可以在任何时候被访问和调用。静态成员的作用是在整个程序中共享数据和方法,节省内存空间和提高程序的执行效率。

1.3 类的构造方法

1.3.1 无参构造方法

无参构造方法是指不带参数的构造方法,它的作用是在创建对象时初始化对象的属性,比如设置默认值等。在Java中,如果一个类没有定义任何构造方法,那么编译器会自动为该类生成一个无参构造方法。

以下是一个示例代码:

public class Person {
    private String name;
    private int age;
​
    // 无参构造方法
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }
​
    // 其他方法
    // ...
}

在上面的示例代码中,我们定义了一个名为Person的类,并且定义了一个无参构造方法。在该方法中,我们设置了name属性的默认值为"Unknown",age属性的默认值为0。

1.3.2 带参构造方法

带参构造方法是指带有参数的构造方法,它的作用是在创建对象时初始化对象的属性,并且可以根据传入的参数设置属性的值。在Java中,我们可以定义多个带参构造方法,每个构造方法可以接收不同类型和数量的参数。

以下是一个示例代码:

public class Person {
    private String name;
    private int age;
​
    // 带参构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
​
    // 其他方法
    // ...
}

在上面的示例代码中,我们定义了一个名为Person的类,并且定义了一个带参构造方法。在该方法中,我们根据传入的参数设置了name属性和age属性的值。

使用带参构造方法创建对象的示例代码:

Person person = new Person("Tom", 20);

在上面的示例代码中,我们使用带参构造方法创建了一个Person对象,并且传入了参数"name"和"age",这样就可以在创建对象时初始化对象的属性。

2. 类的继承

2.1 继承的概念

3.1.1 继承的概念

继承是面向对象编程中的一种重要机制,它允许新的类从已有的类中继承属性和方法。在Java中,一个类可以通过关键字“extends”来继承另一个类的属性和方法。被继承的类称为父类或超类,继承的类称为子类或派生类。子类可以使用父类的公共方法和属性,同时还可以添加自己的方法和属性。继承是实现代码重用和提高代码可读性的重要手段。下面是一个简单的示例:

public class Animal {
    private String name;
    private int age;
​
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
​
    public void eat() {
        System.out.println(name + " is eating.");
    }
​
    public void sleep() {
        System.out.println(name + " is sleeping.");
    }
}
​
public class Dog extends Animal {
    public Dog(String name, int age) {
        super(name, age);
    }
​
    public void bark() {
        System.out.println("Woof! Woof!");
    }
}
​
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Tommy", 3);
        dog.eat();  // 继承自Animal类
        dog.sleep();  // 继承自Animal类
        dog.bark();  // 自己的方法
    }
}

在上面的示例中,Dog类继承了Animal类的属性和方法,同时也添加了自己的方法bark。在Main类中,我们可以创建一个Dog对象并调用它的方法,包括从Animal类继承来的方法和Dog类自己的方法。这个示例展示了继承的基本概念和用法。

2.2 继承的语法结构

2.2.1 继承关键字

继承是面向对象编程中的重要概念,Java中使用关键字extends来实现类的继承。子类继承父类后,可以直接使用父类中的属性和方法,也可以通过重写方法来实现自己的特定功能。下面是一个示例:

public class Animal {
    private String name;
​
    public Animal(String name) {
        this.name = name;
    }
​
    public void eat() {
        System.out.println(name + " is eating.");
    }
}
​
public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
​
    @Override
    public void eat() {
        System.out.println("Dog " + super.name + " is eating bones.");
    }
​
    public void bark() {
        System.out.println("Dog " + super.name + " is barking.");
    }
}
​
public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal("Tom");
        Dog dog = new Dog("Jerry");
​
        animal.eat(); // 输出:Tom is eating.
        dog.eat(); // 输出:Dog Jerry is eating bones.
        dog.bark(); // 输出:Dog Jerry is barking.
    }
}

在上面的示例中,Dog类继承了Animal类,通过重写eat()方法实现了自己的特定功能,同时新增了一个bark()方法。在Main类中,我们创建了一个Animal对象和一个Dog对象,分别调用它们的方法,可以看到子类Dog继承了父类Animal的属性和方法,并且通过重写方法实现了自己的特定功能。

2.3 继承的方法重写

2.3.1 什么是方法重写

方法重写是指子类重新定义父类中已经定义的方法,但保持方法名、参数列表和返回类型与父类方法相同。在程序运行时,当调用子类对象的该方法时,会优先调用子类中重写的方法,而不是父类中的方法。

2.3.2 方法重写的实现

子类重写方法时,需要注意以下几点: - 方法名、参数列表和返回类型必须与父类中被重写的方法一致。 - 访问权限不能低于父类中被重写的方法的访问权限。 - 子类方法抛出的异常类型不能超出父类方法抛出的异常类型范围。 - 子类方法不能使用父类方法中声明为final的变量或方法。

下面是一个示例代码,演示了如何在子类中重写父类的方法:

public class Animal {
    public void move() {
        System.out.println("动物在移动");
    }
}

public class Dog extends Animal {
    public void move() {
        System.out.println("狗在奔跑");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.move();
        Dog dog = new Dog();
        dog.move();
    }
}

输出结果为:

动物在移动
狗在奔跑

在上面的示例代码中,Animal类中定义了一个move()方法,输出“动物在移动”。而在Dog类中重写了该方法,输出“狗在奔跑”。当创建一个Animal对象和一个Dog对象,并调用它们的move()方法时,Animal对象输出“动物在移动”,而Dog对象输出“狗在奔跑”,说明子类中重写的方法优先于父类中的方法被调用。

3. 类的访问控制

3.1 访问控制的概念

3.1.1 访问控制的概念

访问控制是指限制类中成员的访问范围,以保护数据的安全性和完整性。Java中有4种访问控制修饰符:public、protected、default、private。其中,public表示公开的,可以在类的内部和外部访问;protected表示受保护的,可以在类的内部、外部同一包的类和子类中访问;default表示默认的,可以在类的内部和同一包的类中访问;private表示私有的,只能在类的内部访问。访问控制修饰符可以应用于类的成员变量、方法和构造方法,以实现对类的成员的访问控制。下表总结了访问控制修饰符的访问范围:

访问控制修饰符类内部同一包子类其他包
public✔️✔️✔️✔️
protected✔️✔️✔️
default✔️✔️
private✔️

例如,以下代码展示了一个类中成员的访问控制:

public class Person {
    public String name; // 公开的成员变量
    protected int age; // 受保护的成员变量
    String gender; // 默认的成员变量
    private String address; // 私有的成员变量

    public void sayHello() { // 公开的成员方法
        System.out.println("Hello, my name is " + name);
    }

    protected void growUp() { // 受保护的成员方法
        age++;
    }

    void changeGender() { // 默认的成员方法
        if (gender.equals("male")) {
            gender = "female";
        } else {
            gender = "male";
        }
    }

    private void changeAddress(String newAddress) { // 私有的成员方法
        address = newAddress;
    }
}

3.2 访问控制的语法结构

3.2.1 访问修饰符

Java中有四种访问修饰符:public、protected、default和private。这些修饰符用于控制类、方法和变量的可见性和访问级别。

修饰符同类同包子类其他包
public✔️✔️✔️✔️
protected✔️✔️✔️
default✔️✔️
private✔️
- public:公共的,可以被任何类访问。
- protected:受保护的,可以被同一包内的类和所有子类访问。
- default:默认的,可以被同一包内的类访问,不可以被其他包的类访问。
- private:私有的,只能被自己所在的类访问,其他类不能访问。

访问修饰符的使用要根据实际情况来选择,一般情况下,我们应该尽量使用最小的访问修饰符,以保证程序的安全性和可读性。

3.3 访问控制的权限控制

3.3.1 访问修饰符

访问修饰符是一种用于限制类、变量、方法和构造函数访问权限的关键字。Java中有4种访问修饰符:public、protected、default和private。

修饰符同一类同一包内子类其他包
public
protected
default
private
- public:可以被任何类、方法和变量访问。
- protected:可以被同一类、同一包内的类、以及其他包中的子类访问。
- default:可以被同一类、同一包内的类访问。
- private:只能被同一类内的方法和变量访问。

在使用访问修饰符时,需要根据具体情况进行选择。一般情况下,应尽量使用最严格的访问修饰符,以保证程序的安全性和稳定性。

4. 类的多态

4.1 多态的概念

3.1.1 什么是多态

多态是面向对象编程的三大特性之一,指的是同一个类的实例在不同情况下表现出不同的行为。具体来说,就是子类可以重写父类的方法,从而实现对同一方法的不同实现,而调用该方法时会根据实际对象的类型来执行相应的实现。多态可以提高代码的灵活性和可扩展性,使得代码更加易于维护和修改。

举个例子,假设我们有一个动物类Animal,其中有一个方法eat(),然后我们派生出狗类Dog和猫类Cat,它们都继承自Animal类并重写了eat()方法。现在我们可以定义一个Animal类型的变量a,然后让它分别指向Dog和Cat的实例,然后调用它们的eat()方法,这时会根据实际指向的对象类型来执行相应的eat()方法,即狗会吃骨头,猫会吃鱼。

动物类ANIMAL狗类DOG猫类CAT
eat()吃东西吃东西

4.2 多态的语法结构

3.1.2 多态的语法结构

多态是面向对象编程的一个重要特性,它可以让不同的对象对同一个方法作出不同的响应。在Java中,实现多态需要满足两个条件:继承和方法重写。具体地,需要满足以下语法结构:

class SuperClass {
    public void method() {
        // 父类方法的实现
    }
}

class SubClass extends SuperClass {
    @Override
    public void method() {
        // 子类方法的实现
    }
}

SuperClass obj1 = new SuperClass();
SuperClass obj2 = new SubClass();
obj1.method();  // 调用父类方法
obj2.method();  // 调用子类方法

在上述代码中,定义了一个父类SuperClass和一个子类SubClass,子类继承了父类的方法method()并重写了该方法。在创建对象时,可以使用父类类型的引用指向子类对象,这样可以实现多态。当调用method()方法时,实际上会根据对象的类型来调用对应的方法实现。

需要注意的是,多态只适用于实例方法,而不适用于静态方法或私有方法。此外,如果父类中的方法为私有方法,则子类无法重写该方法,因此也无法实现多态。

4.3 多态的应用场景

3.1.1 多态在实现接口时的应用

接口是Java中一种重要的多态机制,通过实现接口,一个类可以具有多种不同的行为方式。例如,一个电子产品类可以实现一个“可充电”接口和一个“不可充电”接口,从而使得这个类可以同时拥有不同的充电方式。在实际开发中,接口的应用非常广泛,可以用于实现各种不同的功能和特性。

以下是一个示例代码,展示了一个电子产品类如何实现“可充电”和“不可充电”接口:

// 可充电接口
interface Rechargeable {
    void recharge();
}

// 不可充电接口
interface NonRechargeable {
    void useBattery();
}

// 电子产品类
class ElectronicProduct implements Rechargeable, NonRechargeable {
    public void recharge() {
        System.out.println("正在充电...");
    }

    public void useBattery() {
        System.out.println("正在使用电池...");
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) {
        ElectronicProduct product = new ElectronicProduct();
        product.recharge();     // 正在充电...
        product.useBattery();   // 正在使用电池...
    }
}

在上面的代码中,ElectronicProduct类实现了Rechargeable和NonRechargeable接口,从而可以同时拥有充电和使用电池的功能。在Main类中,我们可以创建一个ElectronicProduct对象,并调用其recharge()和useBattery()方法,从而实现不同的功能。

5. 类的内部类

5.1 内部类的概念

3.1.1 成员内部类

成员内部类是指定义在另一个类中的类,它与外部类有相同的访问权限。成员内部类可以访问外部类的所有成员变量和方法,包括私有的成员。在外部类的方法中,可以通过创建内部类的对象来访问内部类的成员。示例代码如下:

public class Outer {
    private int outerVar;

    public void outerMethod() {
        Inner inner = new Inner();
        inner.innerMethod();
    }

    class Inner {
        private int innerVar;

        public void innerMethod() {
            outerVar = 1;
            innerVar = 2;
            System.out.println("outerVar: " + outerVar + ", innerVar: " + innerVar);
        }
    }
}

在上面的代码中,InnerOuter 的成员内部类,它可以访问 Outer 的私有成员变量 outerVar。在 outerMethod 中,我们创建了 Inner 的对象 inner,并调用了它的方法 innerMethod,在该方法中,我们可以访问 Outer 的成员变量 outerVarInner 的成员变量 innerVar

5.2 内部类的语法结构

1.

在Java中,内部类是定义在另一个类内部的类,它可以访问外部类的私有成员,而外部类无法访问内部类的成员。内部类可以分为成员内部类、局部内部类、匿名内部类和静态内部类。

2.

成员内部类是定义在另一个类的内部的非静态类,它可以访问外部类的所有成员,包括私有成员。定义成员内部类的语法结构如下:

class OuterClass {
    ...
    class InnerClass {
        ...
    }
    ...
}
3.

局部内部类是定义在方法内部的内部类,它只能在该方法内部使用。定义局部内部类的语法结构如下:

class OuterClass {
    ...
    void methodName() {
        class InnerClass {
            ...
        }
        ...
    }
    ...
}
4.

匿名内部类是没有名字的内部类,它通常用于创建实现某个接口或继承某个类的对象。定义匿名内部类的语法结构如下:

class OuterClass {
    ...
    interface InterfaceName {
        ...
    }
    ...
    void methodName() {
        InterfaceName obj = new InterfaceName() {
            ...
        };
        ...
    }
    ...
}
5.

静态内部类是定义在另一个类内部的静态类,它不能访问外部类的非静态成员,但可以访问外部类的静态成员。定义静态内部类的语法结构如下:

class OuterClass {
    ...
    static class InnerClass {
        ...
    }
    ...
}

5.3 内部类的应用场景

3.1 内部类在事件驱动程序中的应用

事件驱动程序是一种常见的编程模式,它的核心思想是程序会等待某些事件的发生,然后执行相应的操作。在Java中,事件驱动程序通常使用监听器(Listener)来实现。内部类在这种场景下非常有用,因为它可以轻松地访问外部类的私有成员变量和方法。

例如,假设我们正在编写一个GUI程序,当用户单击某个按钮时,程序需要执行一些操作。我们可以创建一个按钮监听器的内部类,它会监听按钮的单击事件,然后执行相应的操作。代码示例:

public class MyGUI {
    private int count = 0;

    public void init() {
        JButton button = new JButton("Click me!");
        button.addActionListener(new ButtonListener());
        // add button to GUI
    }

    private class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            count++;
            System.out.println("Button clicked " + count + " times.");
        }
    }
}

在上面的代码中,我们创建了一个MyGUI类,它包含了一个私有成员变量count和一个init()方法。在init()方法中,我们创建了一个JButton实例,并创建了一个ButtonListener的实例作为按钮的监听器。ButtonListener是MyGUI的内部类,它可以轻松地访问MyGUI的私有成员变量count,并在按钮被单击时将count加1并输出到控制台上。

通过使用内部类,我们可以将GUI程序的逻辑分解为多个小的模块,每个模块都可以独立地处理自己的任务。这样可以使程序更加清晰、易于维护和扩展。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (44)-- 算法导论6.1 1题

一、在高度为h的堆中,元素个数最多和最少分别是多少? 文心一言: 在高度为 h 的二叉搜索树(BST)中,元素个数最多和最少的情况分别如下: 1.最多情况:当每个节点都包含两个子节点时&#xff0c…

CSS3-盒子模型-边距问题

1 清除默认内外边距 场景:浏览器会默认给部分标签设置默认的margin和padding,但一般在项目开始前需要先清除这些标签默认的margin和padding,后续自己设置 比如:body标签默认有margin:8px、p标签默…

一句提示词生成整个代码库——Gpt Engineer神级项目开源(附演示视频)

近日,一个名为Gpt Engineer神级项目开源,并迅速火爆全网。 短短几天内,该项目已经得到了25K的星星。 使用GPT-engineer进行人工智能软件开发,可以改变软件开发的未来。 在软件开发领域,一场巨大的革命正在开始。这一转…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 22 日论文合集)

文章目录 一、检测相关(9篇)1.1 Wildfire Detection Via Transfer Learning: A Survey1.2 Polygon Detection for Room Layout Estimation using Heterogeneous Graphs and Wireframes1.3 Exploiting Multimodal Synthetic Data for Egocentric Human-Object Interaction Detec…

前端中的相关概念

谁道人生无再少, 门前流水尚能西。 桃花落尽胭脂透, 庭院无声五更鸡。 —— 杜甫《端午节》 HTML中class属性 HTML中class属性是一种用于为元素定义样式和标识的属性,以下是class属性的几种常见用法实例,包括标识元素、定义样…

利用OpenCV计算条形物体的长度

0、前言 在图像处理中,我们可能会遇到求一个线条长度的场景,比如,现在有一条裂缝,需要求其长度,或者有一个长条形的零件需要知道其长度。 本文利用OpenCV和skimage两个库,提供了一个解决方案。 1、解决步…

贪心法与动态规划的对比分析

高级算法设计课程论文 题 目:贪心法与动态规划的对比分析 作者姓名: 作者学号: 专业班级: 提交时间: 2023/6/3 目 录 1 引言 1 2 分析过程 2 2.1多段图的最短路径问题 2 2.2最小生成树问题 4 3动态规划与贪心法的对…

【动态规划算法练习】day3

文章目录 一、931. 下降路径最小和1.题目简介2.解题思路3.代码4.运行结果 二、64. 最小路径和1.题目简介2.解题思路3.代码4.运行结果 三、面试题 17.16. 按摩师1.题目简介2.解题思路3.代码4.运行结果 总结 一、931. 下降路径最小和 1.题目简介 931. 下降路径最小和 题目描述&…

浅析 GeoServer CVE-2023-25157 SQL注入

原创稿件征集 邮箱:eduantvsion.com QQ:3200599554 黑客与极客相关,互联网安全领域里 的热点话题 漏洞、技术相关的调查或分析 稿件通过并发布还能收获 200-800元不等的稿酬 更多详情,点我查看! 简介 GeoServer是一个开…

十八、网络基础(一)

一、协议 (一)前置 协议其实是一种约定!!! 计算机之间的传输媒介是光信号和电信号 , 通过 " 频率 " 和 " 强弱 " 来表示 0 和 1 这样的信息 , 要想传递各种不同的信息 , 就需要约定好双方的数据…

(自己动手开发自己的语言练手级应用)JSON(JavaScript Object Notation) 产生式(BNF)

写自己的开发语言时&#xff0c;很多人都会拿JSON当第一个练习对象 开源net json FJSON 解析工具https://dbrwe.blog.csdn.net/article/details/107611540?spm1001.2014.3001.5502 <json> :: <object> | <array> <object> :: "{" [ <me…

分布式学习第三天 nginx学习

目录 1. 一些基本概念 1.1 Nginx初步认识 1.2 正向/反向代理 1.3 域名和IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 课外知识导读 1. URL和URI 2. DNS解析过程 复习 1. 一些基本概念 1.1 Nginx初步认识…

团体程序设计天梯赛-练习集L1篇②

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

在我掉入计算机的大坑并深陷其中时,一门名为“C语言”的编程语言让我沉迷

各位CSDN的uu们你们好呀&#xff0c;小雅兰好久没有更新博客啦&#xff0c;今天来小试牛刀&#xff01;&#xff01;&#xff01; 上一篇博客小雅兰是说自己原本是自动化专业的学生&#xff0c;但是因为一次偶然的机会对计算机的相关知识产生了浓厚的兴趣。那么&#xff0c;小雅…

Linux Ubuntu man文档的图文安装教程

文章目录 前言man文档的起源man文档的安装man文档的使用总结 前言 当提及"man文档"时&#xff0c;通常是指Unix和类Unix系统中的手册页&#xff08;man page&#xff09;&#xff0c;因为Linux是在Unix的基础上发展而来的操作系统&#xff0c;所以我们的Linux也有ma…

操作系统 - 内存管理

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

INDEMIND相机ROS bag包数据的回放

实验需要IMU相机&#xff0c;跑算法是在ROS下跑&#xff0c;在 ROS 系统中&#xff0c;可以使用 bag 文件来保存和恢复系统的运行状态&#xff0c;比如相机话题的 bag 包&#xff0c;然后回放用来进行联合外参标定&#xff0c;也可以使用EVO工具显示算法轨迹&#xff0c;这里记…

合宙Air724UG Cat.1模块硬件设计指南--GPIO控制

GPIO控制 简介 GPIO&#xff08;General-purpose input/output&#xff09;&#xff0c;通用型之输入输出的简称&#xff0c;可实现某时刻电平状态的输出与输入&#xff0c;即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 特性 共支持28个GPIO&a…

A Neural Conversational Model 读后感

目录 摘要 1、介绍 2、相关工作 3、模型 4、数据&#xff08;后面都是具体的东西&#xff0c;不赘述&#xff09; 5、总结 使用微软翻译得到的中文原文&#xff1a; 摘要 会话建模是自然语言理解和机器智能中的一项重要任务。尽管存在以前的方法&#xff0c;但它们通常仅…

MySQL数据库:数据库的约束以及数据的聚合、联合查询

目录 一.关系模型的简要概述 二.数据库的约束 2.1约束类型 2.2NULL约束 2.3 UNIQUE&#xff1a;唯一约束 2.4 默认约束 2.5 PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 …