静态方法和静态属性属于类本身,用static声明,只能通过类名访问;静态方法无this实例上下文,this指向类自身;静态属性ES2022起支持类内初始化,必须赋初值;二者均可被子类继承。

在 JavaScript 的 class 中,静态方法和静态属性都属于类本身,不依赖实例,用 static 关键字声明,只能通过类名访问。
静态方法怎么定义和使用
在方法名前加 static,写在 class 体内,和 constructor、实例方法并列。它不能访问 this(因为无实例上下文),this 指向的是类本身。
- 必须用
类名.方法名()调用,比如User.create() - 实例调用会报错:
new User().create()→TypeError - 适合做工具函数、工厂方法、校验逻辑等与实例无关的操作
示例:
class User {
constructor(name) {
this.name = name;
}
static create(name) {
return new User(name);
}
static isValidName(str) {
return typeof str === 'string' && str.trim().length > 0;
}
}
User.create('Tom'); // ✅ 正常返回实例
User.isValidName(''); // ✅ 返回 false
静态属性怎么定义和使用
ES2022 起正式支持类内直接声明静态属性,语法是 static + 属性名 = 值;旧写法(ES6)需在 class 外赋值,但已不推荐。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 静态属性也只属于类,可通过
类名.属性名直接读取或修改 - 实例无法访问:
new User().count是undefined - 可用于计数器、配置项、默认值等类级别共享数据
示例:
class Request {
static timeout = 5000;
static baseUrl = 'https://api.example.com';
static setDefaultTimeout(ms) {
this.timeout = ms; // this 指向 Request 类
}
}
console.log(Request.timeout); // 5000
Request.setDefaultTimeout(8000);
console.log(Request.timeout); // 8000
注意 this 在静态成员中的指向
在静态方法或静态属性的初始化表达式中,this 指向的是该 class 本身,不是实例。这个特性让静态方法能安全调用其他静态成员,也能用于构造新实例(如 return new this(...))。
-
static create() { return new this('default'); }可被子类继承并正确创建子类实例 - 静态方法中访问
this.xxx,等价于访问当前类.xxx
常见误区提醒
不要混淆静态与实例作用域:
- ❌
user.staticMethod()—— 实例不能调用静态方法 - ❌
class User { count = 0; }—— 这是实例属性,每个实例都有独立副本 - ❌
class User { static count; }(无初始值)—— 非法,静态属性必须有初始值(ES2022+) - ✅ 静态成员可被子类继承,子类也能用
super调用父类静态方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










