static关键字
静态成员在类加载时初始化。使用类名可以访问静态成员

静态变量
类名.静态变量可以访问静态变量
java
class User {
static int count = 0;
User() {
count++;
}
}
public class Test {
public static void main(String[] args) {
new User();
new User();
new User();
System.out.println(User.count);//3
}
}静态方法
类名.静态方法()可以访问静态方法
java
class MathUtil {
static int add(int a, int b) {
return a + b;
}
}
public class Test {
public static void main(String[] args) {
int result = MathUtil.add(3, 5);
System.out.println(result);
}
}静态方法可以直接访问静态变量。
java
class Counter {
static int count = 0;
static void increment() {
count++; // 直接访问静态变量
}
}在同一个类中类名可以省略
java
class Counter {
static int count = 0;
static void increment() {
Counter.count++; // 直接访问静态变量
}
}提示
静态方法中没有this,因此无法直接访问实例变量和实例方法。
静态代码块
静态代码块(static code block)\是 Java 类中的一种特殊代码块,用于在\类加载时执行一次初始化逻辑。它使用 static {} 定义。
java
class Test {
static {
System.out.println("静态代码块执行");
}
}静态代码块在 类加载(Class Loading)时执行,并且只执行一次。
多个静态代码块
Java 允许多个静态代码块,按代码顺序执行。
java
class Test {
static {
System.out.println("静态代码块1");
}
static {
System.out.println("静态代码块2");
}
}静态代码块1
静态代码块2注意事项
静态成员的执行顺序
java
class Test {
static int a = 10;
static {
System.out.println(a);
}
}- 无法通过编译:
java
class Test {
static {
System.out.println(a);
}
static int a = 10;
}通过对象访问静态成员
在 Java 中,static 成员(包括变量和方法)是属于 类本身 的,而不是某个对象实例。所以理论上 不推荐通过对象去访问 static 成员,虽然语法上是允许的。
虽然可以通过对象访问 static 成员,但这样做容易引起混淆,因为 static 成员并不属于对象。推荐使用类名来访问 static 成员,更清晰,也符合规范。
警告
使用对象访问静态成员,即使对象是null,也能正常访问,因为静态成员与对象无关
