static的关键字的特点?

1 个回答

  • 江南
    舒适是我继续一切关系的标准
    ## 1. **静态变量(类变量)** **特点**: * 属于**类本身**,而不是某个实例,所有对象共享同一份值。 * 在类加载时分配内存,生命周期一直到类卸载。 * 访问方式: * 推荐 `类名.变量` 访问 * 也可以用 `对象.变量`(不推荐,会让人误以为是实例变量) * 常用于**全局计数器、全局配置、缓存**等场景。 **示例**: ```java public class Counter { public static int count = 0; public Counter() { count++; } } Counter c1 = new Counter(); Counter c2 = new Counter(); System.out.println(Counter.count); // 输出 2(共享) ``` ## 2. **静态方法** **特点**: * 不依赖对象实例调用,属于类本身。 * 在方法里**不能直接访问实例变量和实例方法**(因为没有 `this`)。 * 访问静态变量、调用其他静态方法时可以直接用名字。 * 常用于**工具方法、工厂方法**。 **示例**: ```java public class Utils { public static String join(String a, String b) { return a + b; } } System.out.println(Utils.join("Hello", "World")); ``` ## 3. **静态代码块** **特点**: * 在类加载时执行一次(早于构造方法)。 * 常用于初始化静态变量、加载配置、注册驱动。 * 按出现顺序执行多个静态块。 **示例**: ```java public class InitDemo { static { System.out.println("类加载时执行"); } } ``` ## 4. **静态内部类** **特点**: * 不依赖外部类实例就能创建(不持有外部类的 `this` 引用)。 * 可以访问外部类的**静态成员**,不能直接访问外部类的实例成员。 * 常用于与外部类紧密相关,但不需要外部类实例的场景。 **示例**: ```java public class Outer { static class Inner { void show() { System.out.println("静态内部类"); } } } Outer.Inner inner = new Outer.Inner(); // 直接创建 ``` ## 5. **`static` 特性总结表** | 场景 | 生命周期 | 归属 | 是否需要对象 | 访问限制 | | ----- | -------- | -- | -------- | ------------- | | 静态变量 | 类加载到类卸载 | 类 | 不需要 | 可被所有实例共享 | | 静态方法 | 类加载到类卸载 | 类 | 不需要 | 不能访问实例成员 | | 静态代码块 | 类加载时执行一次 | 类 | 不需要 | 只能访问静态成员 | | 静态内部类 | 类加载到类卸载 | 类 | 不需要外部类实例 | 只能直接访问外部类静态成员 |
    发布于 2025-08-07 15:02 •IP属地 宁夏
    举报
    评论
    收藏