java中static关键字详解

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  
        }  
    }

    注意:过度使用静态导入可能会导致代码可读性下降,因此在使用时应谨慎。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值