MST

星途 面试题库

面试题:JavaScript类的静态方法与实例方法及this指向问题

创建一个`MathUtils`类,包含一个静态方法`add`用于计算两个数的和,以及一个实例方法`multiply`用于计算实例属性`num1`和传入参数`num2`的乘积。同时,请阐述在这两个方法中`this`的指向有何不同,以及原因。请给出代码及解释。
24.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

代码实现

public class MathUtils {
    private int num1;

    public MathUtils(int num1) {
        this.num1 = num1;
    }

    // 静态方法计算两个数的和
    public static int add(int a, int b) {
        return a + b;
    }

    // 实例方法计算num1和传入参数num2的乘积
    public int multiply(int num2) {
        return this.num1 * num2;
    }
}

this指向的不同及原因

  1. 在静态方法add
    • 在Java中,静态方法属于类本身,而不是类的实例。所以在静态方法add中,不存在this关键字。如果在静态方法中尝试使用this,会导致编译错误。因为this代表的是当前对象的引用,而静态方法在类加载时就存在,不依赖于任何对象实例。
  2. 在实例方法multiply
    • this指向调用该方法的对象实例。当我们创建MathUtils类的实例并调用multiply方法时,this就指向这个具体的实例对象。通过this可以访问该实例对象的属性(如num1),从而实现实例属性与传入参数的计算。例如:
MathUtils mathUtils = new MathUtils(5);
int result = mathUtils.multiply(3); // 这里的this指向mathUtils实例