帮我解释以下JAVA程序,越详细越好 10

 我来答
ygnzh_cool
2013-12-26
知道答主
回答量:19
采纳率:0%
帮助的人:18.6万
展开全部
1:Inside main()
2:Cup(1)
3:Cup(2)
4:f(99)
这是程序的输出。
解释:
jvm首先初始化main方法所在的那个类,然后执行main方法。如此打印了第一行。
然后,Cups.cup1是对Cups的静态变量cup1的引用,这会触发对Cups类的初始化,jvm会按照静态变量赋值语句和静态语句块出现的顺序执行它们,所以执行static块里的cup1和cup2的两行,这两行都有new语句,cup1那行会触发Cup类的初始化并且执行Cup类的构造函数,cup2那行只执行Cup类的构造函数,于是就有了第二、三行。
最后Cups.cup1.f(99)是对cup1的实例方法f的调用,于是有了第四行。

这是知其然,要知其所以然就不是一两句说完的了。如果你有兴趣,可以看看虚拟机方面的书,推荐《深入理解Java虚拟机——JVM高级特性与最佳实践》,已经出第二版了,我看了一些,觉得很不错,如果不想买可以从网上找找扫描版的看下。这个提问主要涉及第7章的虚拟机类加载机制。

另一位热心网友的回答中所提到的对象的初始化过程指的是new语句的执行过程,其中的1~4是类的初始化过程,类的初始化有5个时机,并不只new时才初始化类。5~8是对象的初始化过程,这个过程只在new语句出现时执行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朱可星
2013-12-26 · TA获得超过913个赞
知道小有建树答主
回答量:1860
采纳率:91%
帮助的人:325万
展开全部
cup 杯子,marker标号

构造函数的 重载,实现了一个打印 杯子标号的功能。同时 f函数 可以修改标号,就是把marker重写一次。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-25
展开全部
原理:
对象的初始化过程:
1、首先会加载StaticCode.class文件。加载的过程中,构造函数,一般函数,普通的成员变量,都会
加载到方法区中的StaticCode所在的那里class文件的区域中。而所有的静态都会被加载到方法区的
静态区中。
2、所有的静态变量加载完成之后,开始对所有的静态变量进行显示的初始化。
3、静态变量显示初始化结束之后,静态代码块开始执行。
4、静态代码块执行完成之后,类的加载结束。
5、开始在堆中创建StaticCode对象。
6、对象中的所有成员变量默认初始化
7、构造函数压栈
7.1 隐式的super找父类进行初始化
7.2 成员变量显示初始化
7.3 构造代码块执行。
7.4 构造函数里面的代码执行
8、对象在堆中创建完成,把内存地址赋值给sc引用变量。
这个题进入主函数后先执行System语句:输出Inside main
然后执行Cups.cup1.f(99):
这条语句执行第一个Cups时,先进入Cups类中,加载静态成员并初始化,初始化完毕后执行静态代码块,静态代码块中的代码执行结束后,将初始化成员变量,按照上面的步骤走,走完结果就出来了…………
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式