Java 中静态代码块中如何调用静态方法
作者:远山有雾青石小巷
时间:2026-07-05
浏览:0
静态代码块中可直接调用静态方法,但被调方法不能依赖未初始化的静态变量。执行顺序按源码顺序,方法需先定义或可见。跨类调用需权限足够且类已加载。需注意静态变量可能为默认值。
本文目录
一句话总结:静态代码块里直接调用静态方法,Ja va 是允许的,但得留个心眼——调用的方法不能依赖还没初始化好的静态变量。而且执行顺序是按源码顺序来的,方法得先定义,或者至少对静态块来说可见。跨类调用的话,权限要够、类要已经加载。
很多初学者会纠结:静态代码块和静态方法到底谁先谁后?其实很简单。
类加载时,静态代码块和静态变量按照它们在源码中间出现的顺序依次执行。静态方法本身不会自动跑,但你可以在静态块里显式调用它——前提是这个方法不去碰那些还没初始化的静态字段。
- 被调用的静态方法必须是
public、protected或包内可见,并且由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 上。
作者最新文章
漫蛙如何解除管控
2026-10-13 13:02
camtasia studio怎么导出视频和字幕
2026-10-12 09:22
iphone电池不耐用怎么修复?实用方法教程
2026-09-22 15:16
python怎么用:从环境准备到依赖管理的实操与验证
2026-09-05 00:11
2026年车市新势力崛起:新车型精准发力 单月销量突破两万大关
2026-08-25 15:36
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多










































