跳转到主要内容
模块 2 · 第 1 课(共 2)课程中的3/14~12 min
模块课程(1/2)

类和对象

Java 是一种专注于 面向对象编程 (OOP) 的语言。在面向对象编程中,我们使用对象对现实世界进行建模。对象具有状态(数据)和行为(动作)。

类和对象

  • 类:它是定义一类对象的属性和行为的蓝图(或模板)。
  • 对象:它是从类创建的具体实例。

例如,如果 Car 是类,则车库中的汽车就是实际对象。

实例字段和构造函数

类内的数据称为实例字段(或属性)。为了在对象创建时初始化对象的状态,我们使用一种称为构造函数的特殊方法。

构造函数具有与类相同的名称并且没有返回类型(甚至没有 void)。

Java
class Dog {
    // Instance fields
    String name;
    int age;

    // Constructor
    public Dog(String name, int age) {
        this.name = name; // 'this' refers to the current object's field
        this.age = age;
    }
}

使用 new 创建对象

要在内存中创建对象,我们使用 new 关键字,后跟类构造函数:

Java
public class Main {
    public static void main(String[] args) {
        // Creating a Dog object
        Dog myDog = new Dog("Fido", 3);

        // Accessing fields
        System.out.println(myDog.name + " is " + myDog.age + " years old.");
    }
}

this 参考

Java 中的 this 关键字指的是正在执行构造函数或方法的当前对象。它主要用于当构造函数参数与对象的实例字段同名时避免歧义(变量遮蔽):

Java
class User {
    String username;

    public User(String username) {
        this.username = username; // this.username is the instance field, username is the parameter
    }
}

内存分配:堆栈与堆

了解 Java 如何分配内存至关重要:

  1. 堆栈:它是一个快速且有组织的内存区域,其中存储方法本地的原始变量和对象引用(内存地址)。
  2. 堆:它是分配实际对象的更大的动态内存区域(使用new关键字)。

当我们声明 Dog myDog = new Dog("Fido", 3); 时:

  • 引用 myDog 在 Stack 上创建。
  • 实际的 Dog 对象及其数据是在 堆 上创建的。
  • myDog 变量指向 堆 上对象的位置。

自己尝试一下

锻炼#java.m2.l1.e1
尝试:0加载中...

通过添加字段名称和适当的构造函数来完成 Person 类。然后,在 main 方法中,创建一个名为 p 且名为 Alice 的 Person 对象。

正在加载编辑器...
显示提示

在类中写入`String name;`,声明构造函数`public Person(String name) { this.name = name; }` 并用 `new Person('Alice')` 实例化它。

3 次尝试后可用的解决方案

锻炼#java.m2.l1.e2
尝试:0加载中...

创建一个 Book 类,其中包含字段 title (String) 和 Pages (int),一个完整的构造函数,并在 main 方法中实例化一本名为 b 的书,书名为 Moby Dick,页数为 600。

正在加载编辑器...
显示提示

请记住在 Book 中定义这两个字段,使用 `this.title = title;` 和 `this.pages = pages;` 在构造函数中映射它们,并使用 `new Book('Moby Dick', 600)`。

3 次尝试后可用的解决方案

锻炼#java.m2.l1.e3
尝试:0加载中...

创建一个包含字段名称(字符串)和价格(双精度)的 Product 类,以及初始化这两个字段的构造函数。在 main 方法中,创建一个名为 p 的 Product 对象,名称为 Laptop,价格为 999.99。

正在加载编辑器...
显示提示

在 Product 中声明 `String name;` 和 `doubleprice;` 字段,并在构造函数中使用 `this.name = name;` 和 `this.price =price;` 对其进行赋值,最后在 main 方法中创建对象。

3 次尝试后可用的解决方案