浏览 1379 次
锁定老帖子 主题:java初始化小发现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-20
打印出的内容如下: static Insect.prt initialized,a = 0 static Insect.x1 static Insect.prt initialized,a = 0 static Beetle.x2 initialized Beetle constructor i = 9,j = 0 Beetle.k initialized k = 47 j = 39 发现static函数prt被初始化两次,在父类和子类中分别被初始化两次。 后来想想了,可能可以从自己的判断条件上改一下,就能解决“static Insect.prt initialized,a = 0”被打印两次的问题。“a == 0”改为“a == 1”当然初始化的值要改一下。于是prt方法就不会被打印2次了。不过本质上static方法还是被初始化多次,初始化过程需要递归调用未被初始化却被使用的方法。但是类变量和方法都会被递归调用多次初始化,如果父类子类中都有的话。 结论:类变量由于在编译早期完成初始化,会存在递归并且多次初始化的过程。但是在实例生成之前,类变量和类函数的初始化已经完成,所以对实例来说,类变量和类函数是被认为是一次初始化的。也就有了,所有类无论多少实例都只有“一份”类变量和类函数的理解。 这是我的理解,有问题欢迎提出,感谢讨论谢谢。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |