1. 静态变量(Static Variables)
-
静态变量属于类本身,而不是类的某个实例。
-
静态变量在类加载到JVM时被初始化,且只会被初始化一次。
-
无论创建多少个类的实例,静态变量都只有一份内存空间。
-
可以通过类名直接访问静态变量,无需创建类的实例。
public class MyClass { static int staticVar = 42; // 静态变量 public static void main(String[] args) { System.out.println(MyClass.staticVar); // 直接通过类名访问静态变量 } }
2. 静态方法(Static Methods)
-
静态方法也属于类本身,而不是类的某个实例。
-
静态方法只能访问静态变量和其他静态方法,不能直接访问类的非静态变量和非静态方法(除非通过类的实例)。
-
可以通过类名直接调用静态方法,无需创建类的实例。
public class MyClass { static int staticVar = 42; static void staticMethod() { System.out.println(staticVar); } public static void main(String[] args) { MyClass.staticMethod(); // 直接通过类名调用静态方法 } }
3. 静态块(Static Blocks)
-
静态块在类加载时执行,且只执行一次。
-
静态块通常用于初始化静态变量或执行只需执行一次的代码。
public class MyClass { static int staticVar; static { staticVar = 42; // 静态块中初始化静态变量 System.out.println("Static block executed"); } public static void main(String[] args) { System.out.println(MyClass.staticVar); } }
4. 静态内部类(Static Nested Classes)
-
静态内部类不持有外部类的引用,因此无法直接访问外部类的非静态成员。
-
静态内部类可以访问外部类的静态成员,包括静态变量、静态方法和静态块。
public class OuterClass { static int outerStaticVar = 42; static class StaticNestedClass { void method() { System.out.println(OuterClass.outerStaticVar); // 访问外部类的静态变量 } } public static void main(String[] args) { StaticNestedClass nested = new StaticNestedClass(); nested.method(); } }
5. 静态导入(Static Import)
-
静态导入允许你直接使用静态变量和静态方法的名称,而无需使用类名作为前缀。
-
静态导入使用
import static
语句。import static java.lang.Math.PI; // 静态导入Math类的PI常量 public class MyClass { public static void main(String[] args) { System.out.println(PI); // 直接使用PI,无需Math.PI } }
注意:过度使用静态导入可能会导致代码可读性下降,因此在使用时应谨慎。