【请教】解释一下代码

nezzar 2010-01-13 07:08:06

class A {
.....
static {
f();
}
static void f() {.....}
}
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzju64676266 2010-01-13
  • 打赏
  • 举报
回复
A类第一次加载的时候静态方法就创建了入口地址,也就是static void f() {.....}已经可以被调用了,所以在执行static {}代码块的时候已经可以调用f() 方法,之所以在static{}块中不能直接调用实例方法是因为,实例方法要在对象第一次被创建的时候才开辟方法入口地址,所以在static中调用非static方法只能通过实例调用,要不然编译不能通过
closewbq 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nezzar 的回复:]
引用 1 楼 healer_kx 的回复:
当A被引用的时候,调用f();

学习一下static {}


意思是A的被引用会自动调用f?
[/Quote]
在引用类A的时候,首先会初始化静态的变量,以及静态块,然后就是构造函数。
wzju64676266 2010-01-13
  • 打赏
  • 举报
回复
static {
f(); //这里调用的方法必须是static类型的,否则要通过创建实例调用非静态方法
}
这段表示静态初始化块,引用的成员变量只能是静态成员变量,这段代码的类加载的时候会执行(只执行一次,下次类加载的时候不会执行)
closewbq 2010-01-13
  • 打赏
  • 举报
回复
找下初始化的顺序,自己研究下。
nezzar 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
当A被引用的时候,调用f();

学习一下static {}

[/Quote]
意思是A的被引用会自动调用f?
healer_kx 2010-01-13
  • 打赏
  • 举报
回复
当A被引用的时候,调用f();

学习一下static {}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧