静态方法用static声明,只能通过类名调用且this指向当前类;静态属性现代环境支持类内static prop = value语法,挂载于类本身、实例共享,ES6需类外赋值;继承时静态成员被继承,this动态绑定实际调用类。

直接用 static 关键字声明静态方法,静态属性则分环境处理:现代环境(Node.js v16+、主流浏览器)支持类内 static prop = value 语法;严格 ES6(2015)标准只允许类外赋值,但实际开发中几乎都用类内写法。
静态方法:用 static 声明,只能通过类名调用
静态方法属于类本身,不依赖实例,内部 this 指向当前类(或子类),不能访问实例属性或方法。
- 在方法名前加
static即可定义 - 必须用
ClassName.methodName()调用,new ClassName().methodName()会报错 - 适合工具函数、工厂方法(如创建实例)、与类逻辑相关但无需实例状态的操作
示例:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
class ApiClient {
static fetchUser(id) {
return fetch(`/api/users/${id}`);
}
}
ApiClient.fetchUser(123); // ✅ 正确
// new ApiClient().fetchUser(123); // ❌ 报错
立即学习“Java免费学习笔记(深入)”;
静态属性:类内声明(ES2022起正式支持)
静态属性也挂载在类上,多个实例共享同一份值。对象或数组类型需注意引用共享问题。
- 现代写法:直接在 class 内部用
static propName = value - 支持原始值、对象、函数、甚至其他类(可用于嵌套类)
- 初始化在类定义时执行,不是实例化时
示例:
class ApiClient {
static baseUrl = 'https://api.example.com';
static defaultHeaders = { 'Content-Type': 'application/json' };
static requestCount = 0;
}
console.log(ApiClient.baseUrl); // 'https://api.example.com'
ApiClient.requestCount++; // 修改后所有地方读取都是新值
兼容旧环境的写法(ES6 原生方式)
如果目标环境不支持类字段语法(如老旧 Node.js 或 IE),需在类声明后手动赋值。
- 写法:类定义完,再用
ClassName.prop = value添加 - 效果等价,只是代码分散,可读性稍弱
- 适用于需要强兼容性的项目
示例:
class ApiClient {
static getBaseUrl() {
return 'https://api.example.com';
}
}
// 类外赋值静态属性
ApiClient.VERSION = '2.1.0';
ApiClient.TIMEOUT = 8000;
console.log(ApiClient.VERSION); // '2.1.0'
继承中的行为:子类可继承,this 动态绑定
静态成员会被子类继承,且静态方法内的 this 总是指向**实际调用它的类**,不是定义它的父类。
- 子类未重写时,调用父类静态方法,
this是子类构造函数 - 可用
super.staticMethod()显式调用父类版本 - 子类定义同名静态属性,会屏蔽父类同名属性(遮蔽,非覆盖)
示例:
class Animal {
static species = 'Mammal';
static info() { return `Species: ${this.species}`; }
}
class Dog extends Animal {
static species = 'Canis lupus';
}
console.log(Animal.info()); // 'Species: Mammal'
console.log(Dog.info()); // 'Species: Canis lupus'(this 指向 Dog)

















