Java中的static关键字

Java中的static关键字是一个非常重要的概念,它用于表示类级别的变量、方法或内部类。以下是关于static关键字的详解:

  1. 静态变量(Static Variables):

静态变量是属于类的变量,而不是属于类的实例。这意味着,无论创建多少个类的实例,静态变量的数量和值都保持不变。静态变量通常用于存储全局数据,可以通过类名直接访问,而不需要创建类的实例。

java 复制代码
class MyClass {
    static int staticVar = 10;
}

public class Main {
    public static void main(String[] args) {
        System.out.println(MyClass.staticVar); // 输出:10
    }
}
  1. 静态方法(Static Methods):

静态方法是属于类的方法,而不是属于类的实例。这意味着,可以直接通过类名调用静态方法,而不需要创建类的实例。静态方法只能访问静态变量和其他静态方法,不能访问类的实例变量和实例方法。

java 复制代码
class MyClass {
    static int staticVar = 10;

    static int staticMethod() {
        return staticVar * 2;
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(MyClass.staticMethod()); // 输出:20
    }
}
  1. 静态内部类(Static Inner Classes):

静态内部类是属于类的静态成员,它不依赖于外部类的实例。静态内部类可以访问外部类的静态变量和静态方法,但不能访问外部类的实例变量和实例方法。

java 复制代码
class OuterClass {
    static int staticVar = 10;

    static class StaticInnerClass {
        void display() {
            System.out.println("Static Inner Class: " + staticVar);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        OuterClass.StaticInnerClass innerObj = new OuterClass.StaticInnerClass();
        innerObj.display(); // 输出:Static Inner Class: 10
    }
}
  1. 静态初始化块(Static Initialization Blocks):

静态初始化块是在类加载时执行的代码块,用于初始化静态变量。静态初始化块仅在类加载时执行一次,且执行顺序在静态变量和静态方法之前。

java 复制代码
class MyClass {
    static int staticVar;

    static {
        staticVar = 10;
        System.out.println("Static Initialization Block");
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(MyClass.staticVar); // 输出:Static Initialization Block /n 10
    }
}

总结:static关键字用于表示类级别的变量、方法和内部类,它们不依赖于类的实例,而是属于类本身。静态变量和方法可以通过类名直接访问,而静态内部类可以在不创建外部类实例的情况下使用。

相关推荐
Pniubi2 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko73 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师3 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.3 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼4 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
gCode Teacher 格码致知4 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工4 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留4 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu5 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
福兮说5 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json