static关键字的作用和用法?
请详细解释Java中static关键字的用法,包括静态变量、静态方法、静态代码块、静态内部类和静态导入。说明静态成员的生命周期、内存分配以及使用注意事项。
回答
我还是少年
静态变量:属于类而非实例,所有实例共享同一份内存。在类加载时初始化。
静态方法:属于类,可通过类名直接调用。不能直接访问非静态成员(因为不依赖于实例)。
静态代码块:类加载时执行一次,用于初始化静态变量。可以有多个,按定义顺序执行。
静态内部类:不依赖外部类实例,不能访问外部类的非静态成员。
静态导入:import static 直接导入类的静态成员,可省略类名调用。
生命周期:static成员随类的加载而分配,随类卸载而回收(通常直到JVM退出)。存储在方法区(元空间)。
注意事项:static方法不能被重写(是隐藏而非重写);大量使用static可能导致内存泄漏(如集合持有大量静态引用);static变量在多线程环境下需注意线程安全。