麻烦解释一下这个java程序的执行流程,详细一点,谢谢!
classA{publicA(){init();}publicvoidinit(){}}publicclassBextendsA{inti;ints=1;publicvo...
class A {
public A() {
init();
}
public void init() {
}
}
public class B extends A {
int i;
int s=1;
public void init(){
i = 100;
s = 100;
}
public void println() {
System.out.println(i);
System.out.println(s);
}
public static void main(String[] arg) {
new B().println();
}
} 展开
public A() {
init();
}
public void init() {
}
}
public class B extends A {
int i;
int s=1;
public void init(){
i = 100;
s = 100;
}
public void println() {
System.out.println(i);
System.out.println(s);
}
public static void main(String[] arg) {
new B().println();
}
} 展开
展开全部
类的实例化过程:
1。首先执行父类的静态初始化块、静态属性定义,执行顺序与源代码书写顺序相同。
2。然后执行子类的静态初始化块、静态属性定义,执行顺序与源代码书写顺序相同。
3。执行父类的普通初始化块、普通属性定义、构造函数,它们执行的顺序为,先执行普通初始化块、普通属性定义,执行顺序与源代码书写顺序相同。然后再执行构造函数。
4。执行子类的普通初始化块、普通属性定义、构造函数,它们执行的顺序为,先执行普通初始化块、普通属性定义,执行顺序与源代码书写顺序相同。然后再执行构造函数。
5。注意初始化时的方法重写的情况。
6。以上执行的理解:当系统在第一次使用某个类时,将会加载并初始化它,在类的准备阶段,系统将会为该类的类属性分配内存空间,并指定默认默认值。初始化后,系统将在堆内存为这个类分配一块内存空间。当创建第二个此类的对象时,因为它已经存在堆内存中,所以不再需要对这个类进行初始化。
1。首先执行父类的静态初始化块、静态属性定义,执行顺序与源代码书写顺序相同。
2。然后执行子类的静态初始化块、静态属性定义,执行顺序与源代码书写顺序相同。
3。执行父类的普通初始化块、普通属性定义、构造函数,它们执行的顺序为,先执行普通初始化块、普通属性定义,执行顺序与源代码书写顺序相同。然后再执行构造函数。
4。执行子类的普通初始化块、普通属性定义、构造函数,它们执行的顺序为,先执行普通初始化块、普通属性定义,执行顺序与源代码书写顺序相同。然后再执行构造函数。
5。注意初始化时的方法重写的情况。
6。以上执行的理解:当系统在第一次使用某个类时,将会加载并初始化它,在类的准备阶段,系统将会为该类的类属性分配内存空间,并指定默认默认值。初始化后,系统将在堆内存为这个类分配一块内存空间。当创建第二个此类的对象时,因为它已经存在堆内存中,所以不再需要对这个类进行初始化。
展开全部
new B时 会先进父类的构造函数 执行init方法 而B又重写了父类的init方法则此时 i = 100,s =100
执行完init方法后 再走B中的成员 此时赋值s=1
而后调用B类中的println方法 打印i 和S的值 打印出 100 1
执行完init方法后 再走B中的成员 此时赋值s=1
而后调用B类中的println方法 打印i 和S的值 打印出 100 1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
入口为main()
创建了一个B对象
执行class B 中的println()
创建了一个B对象
执行class B 中的println()
追问
这个不用你说,它的输出结果是
100
1
为什么,请解释说明,并列出程序的执行流程,分就给你了!
追答
程序执行的时候会递归调用父类的构造方法,每个类都有一个默认的super(),当B调用A的构造方法时,A的构造方法中制定了init(),B中对init()方法进行了重载,此时i=100,s=100,然后会到B中 定义成员变量s=1, 然后执行println() 输出 100 1
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询