static关键字用于声明属于类本身的成员,包括静态变量(所有实例共享一份)和静态方法(不依赖对象、不能访问实例成员),需通过类名调用,常用于计数、工具方法等场景。

在 Java 中,static 关键字用于声明属于类本身、而非某个具体对象的成员——也就是“类成员”。它不依赖实例就能存在和使用,所有对象共享同一份数据或行为。
定义静态变量(类变量)
静态变量用 static 修饰,属于类,在内存中只有一份,随类加载而初始化,被所有实例共享。
- 定义格式:访问修饰符 static 数据类型 变量名;
- 推荐通过 类名.变量名 访问,比如
Student.numberOfStudents - 避免用对象调用(如
stu1.numberOfStudents),虽语法允许,但语义不清且可能触发警告 - 典型用途:记录对象总数、共享配置(如班级名称、系统版本号)、计数器等
定义静态方法(类方法)
静态方法也用 static 修饰,直接归属于类,不绑定任何对象,因此不能访问实例成员。
- 定义格式:访问修饰符 static 返回类型 方法名(参数列表) { ... }
- 必须用 类名.方法名() 调用,例如
Student.showCount() - 方法体内只能直接访问:静态变量、其他静态方法;不能用
this、super,也不能直接调用非 static 的字段或方法 - 常见场景:工具方法(如
Math.max())、工厂方法、状态查询(如统计当前创建了多少个对象)
关键限制与注意事项
static 成员的生命周期早于对象,所以它的使用有明确边界:
- 静态方法中若真要操作实例成员,必须先 new 出对象,再通过该对象访问
- 静态变量可被任意实例修改,修改后对所有实例立即可见(注意线程安全)
- 如果希望静态值不可变,应搭配 final 使用,例如:
public static final String VERSION = "1.2.0"; - 静态代码块(
static { ... })会在类加载时执行一次,适合做静态变量的复杂初始化
一个完整小例子
以下 Student 类展示了静态变量计数 + 静态方法展示的典型写法:
public class Student {
private String name;
private static int count = 0; // 所有学生共享的计数器
public Student(String name) {
this.name = name;
count++; // 每创建一个实例,计数+1
}
public static void printTotal() { // 静态方法
System.out.println("已创建学生:" + count + " 人");
}
}
// 使用:
Student.printTotal(); // 输出:已创建学生:0 人
new Student("张三");
new Student("李四");
Student.printTotal(); // 输出:已创建学生:2 人
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











