跳转至

Java 与 Python⚓︎

约 538 个字 56 行代码 预计阅读时间 3 分钟

实例自身的处理⚓︎

Python 和 Java 在类方法中对“实例自身”的处理确实存在明显差异,核心区别在于 是否显式声明“实例引用参数”。下面通过具体代码对比两者的实现差异:

1. 核心差异:self vs this⚓︎

  • Python:必须在实例方法的第一个参数显式声明 self(名称可自定义,但约定用 self),用于指代当前实例。
  • Java:不需要显式声明实例引用参数,而是通过关键字 this 隐式指代当前实例(this 由编译器自动传入,无需手动添加到方法参数中)。

2. 代码对比:实现相同功能⚓︎

以“访问实例属性和方法”为例,分别用 Python 和 Java 实现:

Python 实现(显式 self⚓︎

class MyClass:
    # 类属性(所有实例共享)
    class_i = 12345

    # 实例方法:第一个参数必须显式声明 self
    def f(self):
        return "hello world"

    # 操作实例属性的方法(需通过 self 访问)
    def set_instance_i(self, value):
        self.instance_i = value  # self 指代当前实例

    def get_instance_i(self):
        return self.instance_i  # 通过 self 访问实例属性


# 实例化
x = MyClass()

# 调用方法(Python 自动将 x 作为 self 传入)
print(x.f())  # 输出:hello world

x.set_instance_i(6789)
print(x.get_instance_i())  # 输出:6789

Java 实现(隐式 this⚓︎

public class MyClass {
    // 类属性(静态属性,所有实例共享)
    static int classI = 12345;

    // 实例属性(每个实例独立)
    int instanceI;

    // 实例方法:无需声明实例参数,直接用 this 指代当前实例
    public String f() {
        return "hello world";
    }

    // 操作实例属性的方法(通过 this 访问,可省略)
    public void setInstanceI(int value) {
        this.instanceI = value;  // this 可省略,直接写 instanceI = value
    }

    public int getInstanceI() {
        return this.instanceI;  // 同上,this 可省略
    }

    public static void main(String[] args) {
        // 实例化
        MyClass x = new MyClass();

        // 调用方法(Java 自动将 x 作为 this 传入)
        System.out.println(x.f());  // 输出:hello world

        x.setInstanceI(6789);
        System.out.println(x.getInstanceI());  // 输出:6789
    }
}

3. 关键区别总结⚓︎

在 Python 中,类的方法与普通的函数只有一个特别的区别 —— 它们必须有一个额外的 第一个参数名称, 按照惯例它的名称是 self。

对比维度 Python Java
实例引用声明 必须显式在方法第一个参数声明 self 无需声明,隐式通过 this 关键字引用
参数传递 调用方法时,Python 自动将实例作为 self 传入 调用方法时,Java 编译器自动将实例作为 this 传入
名称自定义 self 是约定,可改为其他名称(不推荐) this 是关键字,不可修改名称
访问实例成员 必须通过 self.属性/方法 可直接访问(this. 可省略,除非有局部变量重名)

4. 为什么 Java 不需要显式声明?⚓︎

Java 是编译型语言,编译器会自动为实例方法添加一个隐含的参数(指向当前实例),并在调用时自动传入。而 Python 是解释型语言,语法设计更强调“显式优于隐式”,因此要求开发者显式声明 self,让代码更易读(一眼能看出是实例方法)。

简单说:Python 用显式的 self 换来了代码的可读性,Java 用隐式的 this 简化了语法书写