实例方法挂载在prototype上,通过实例调用,this指向实例;静态方法挂载在类本身,通过类名调用,this指向类,不可被实例调用。

看定义位置和关键字
实例方法直接写在 class 体里,不加 static;静态方法必须显式用 static 开头。比如:
-
sayHi() { ... }→ 实例方法,每个实例都能调用 -
static create() { ... }→ 静态方法,只能通过类名调用,如Person.create()
看挂载目标和调用主体
实例方法自动挂到 类.prototype 上,所以所有实例共享、可继承;静态方法直接挂在 类函数本身 上,跟原型链无关。
- 你写
class Dog { bark() {} },等价于Dog.prototype.bark = function() {} - 你写
static run() {},等价于Dog.run = function() {} - 因此
new Dog().bark()合法,new Dog().run()会报错
看 this 指向和使用场景
在实例方法里,this 是当前实例对象;在静态方法里,this 就是类本身(比如 Dog 函数)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 实例方法适合操作实例数据:
this.name、this.id - 静态方法适合工具逻辑:
Dog.countAll()、Dog.fromJSON(data)、Dog.isDog(obj) - 静态方法中不能访问
this.name这类实例属性,除非你手动传入实例
看能否被子类实例继承
实例方法天然可被子类实例继承并调用;静态方法也能被子类继承,但仍是“类级别”的,子类实例依然不能调用。
立即学习“Java免费学习笔记(深入)”;
-
class Poodle extends Dog { }→new Poodle().bark()可以 -
Poodle.run()可以(继承自 Dog),但new Poodle().run()不行 - 子类静态方法中可用
super.xxx()调用父类静态方法

















