商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Java 中静态代码块中如何调用静态方法

Java 中静态代码块中如何调用静态方法

  发布于2026-07-05 阅读(0)

扫一扫,手机访问

一句话总结:静态代码块里直接调用静态方法,Ja va 是允许的,但得留个心眼——调用的方法不能依赖还没初始化好的静态变量。而且执行顺序是按源码顺序来的,方法得先定义,或者至少对静态块来说可见。跨类调用的话,权限要够、类要已经加载。

很多初学者会纠结:静态代码块和静态方法到底谁先谁后?其实很简单。

类加载时,静态代码块和静态变量按照它们在源码中间出现的顺序依次执行。静态方法本身不会自动跑,但你可以在静态块里显式调用它——前提是这个方法不去碰那些还没初始化的静态字段。

  • 被调用的静态方法必须是 publicprotected 或包内可见,并且由 static 修饰。
  • 同类内调用不需要类名前缀;跨类调用要加上类名,比如 Utils.init()
  • 如果方法内部读了在后面才赋值的静态变量,那拿到的就是默认值(0、null、false 之类),这一点特别容易翻车。

正确调用示例

下面这种写法很常见,也完全合法:

public class Example {
    static int count = 10;
    static {
        System.out.println("进入静态块");
        init(); // 直接调用本类静态方法
        System.out.println("count = " + count); // 输出 10
    }
    static void init() {
        count *= 2; // 修改静态变量
        System.out.println("init 执行完毕");
    }
}

运行时的输出顺序是:
进入静态块
init 执行完毕
count = 20

需要注意的限制

静态代码块里不能调用还没声明的静态方法(编译直接报错),也不能安全地把它的返回值拿去初始化排在它前面的静态字段。反过来说,方法定义必须出现在静态块之前,或者至少在同一编译单元里可见——编译器虽然允许后置定义,但真这么写容易把自己绕晕。另外,构造器、实例方法、this、非静态字段都不能在静态上下文中间出现,这是基本原则。

跨类调用静态方法

只要权限允许,静态块里也能调用别的类的静态方法:

static {
    String s = StringUtils.defaultString(null); // 调用 Apache Commons 的静态方法
    Config.load(); // 调用自定义工具类的静态初始化方法
}

唯一要确认的是目标类已经被 JVM 加载(通常没问题),以及依赖的库已经落在了 classpath 上。

本文转载于:https://www.php.cn/faq/2739771.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注