搜索
首页 电脑/网络 程序设计 JAVA相关

求教一个程序的输出

  class Insect { int i = 9; int j; Insect() { prt("i = " + i + ", j = " + j); j = 39; } static int x1 = prt("static Insect。
  x1 initialized"); static int prt(String s) { System。out。println(s); return 47; }}public class Beetle extends Insect { int k = prt("Beetle。
  k initialized"); Beetle() { prt("k = " + k); prt("j = " + j); } static int x2 = prt("static Beetle。x2 initialized"); public static void main(String[] args) { prt("Beetle constructor"); Beetle b = new Beetle(); }} 输出结果为:static Insect。
  x1 initializedstatic Insect。x2 initializedBeetle constructori=9,j=0Beetle。k initializedk=47j=39请教一下,这个结果是怎么出来的?。

全部回答

2018-03-30

64 0
     输出的结果有7行; 先看第3行:从main方法开始执行,main方法第一行是调用prt方法,所以输出:Beetle constructor; 读懂下面四行,关键是理解继承以及构造方法的调用。
  因为父类的构造方法总是先于子类的构造方法,当创建子类的实例时,先调用父类的构造方法,然后才是子类。   第4行:首先调用Insect 构造方法。因为i已经赋值是9,j没有,所以默认是0;所以就有了这一行的输出。
  至于后面"j=39",是在调用prt方法之后,所以并不影响prt方法对j的输出,但是j在内存中实际的值却是39。 第5行:这一行开始调用子类的构造方法;prt方法输出k的值,而k在初始化的时候调用了prt方法,所以输出了Beetle。
    k initialized。并且给k赋值是47; 第6行:输出k的值; 第7行:输出j的值; 回过头来,再看1,2两行;看懂这两行涉及到static修饰符;static可用于变量,方法,还可以用于不属于方法的一段代码,而这段用static修饰的代码就称为静态块,静态块会在任何方法调用以前执行。
    而代码 static int x1=prt("static Insect。x1 initialized"); static int x2=prt("static Beetle。
  x2 initialized"); 都是静态块,所以提前执行.  补充:    整段代码的难度可能就在于静态块.上面代码中的静态块或许不是很明显.这里有段代码,可能会帮助你更好的理解静态块.    class Example { public Example() { } static void show() { System。
    out。println("show方法输出:8"); } static { System。out。println("这是首先执行的静态块!"); } public static void main(String[] args) { show(); } }    。
    。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
JAVA相关
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
程序设计
JAVA相关
VB
数据库
C/C++
汇编语言
VC++
C#/.NET
其他编程语言
JAVA相关
JAVA相关
举报
举报原因(必选):
取消确定举报