各位高手,问道关于类加载的题目

txtdown0909 2013-09-09 10:36:46

print:
A
1
但是我完全搞不懂为什么啊,B的静态代码块为什么不执行呢?
...全文
224 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
txtdown0909 2013-09-11
  • 打赏
  • 举报
回复
我最后找到答案了:
在以下几种情况会进行类的初始化操作:


初始化操作会调用类的静态代码块。

注意:当前类
笑莫问 2013-09-10
  • 打赏
  • 举报
回复
静态语句块在jvm装载类时调用,B类还没有被装载,可以new B()试试。
浪漫江湖 2013-09-10
  • 打赏
  • 举报
回复
回复4楼: 那是因为A是B的父类,又因为静态块要先于构造方法执行,所以先执行了静态块,但也是执行一次而已。这个没有为什么,很高容易理解,一个对象没有被new出来的时候,静态块(属于类级别的)就已经存在了,所以在先执行。找一本java入门的书看一看吧
txtdown0909 2013-09-09
  • 打赏
  • 举报
回复
public class ClassLoaderTest {
	public static void main(String[] args) throws ClassNotFoundException {
		System.out.println(B.b);
	}
}
class A{
	static int a=1;
	static{
		System.out.println("A");
	}
}
class B extends A{
	static int b=2;
	static{
		System.out.println("B");
	}
}
print: A B 2 这个和上面那个类似,只是调的是b。但是为什么加载了A呢。
txtdown0909 2013-09-09
  • 打赏
  • 举报
回复
恩,楼上两位说得对,但是为什么不加载B类呢。 首先,我调用的是B类。 其次,我会在B类的静态代码块中修改A类中变量的值。(没有语法规定不容许修改吧。) 但是,JVM都不关心我会不会修改,直接只加载A类了事,为什么呢?
无聊找乐 2013-09-09
  • 打赏
  • 举报
回复
B.a 访问的是class A 的属性, 所以只载入了A,没有载入B, 访问B.b看看
wind_elf 2013-09-09
  • 打赏
  • 举报
回复
jvm没有加载B类的class文件,在main方法在加System.out.println(B.b);可以执行B类static语句。

62,634

社区成员

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

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