java基础

输出结果:22、34、17
在这里插入图片描述
1、执行 new B()

new对象B时,执行B构造函数	

在这里插入图片描述

2、B类构造函数,先执行super(5)

super(5) 调用父类A构造函数

在这里插入图片描述
3、 A类构造函数执行setValue(5)

A类中有setValue方法,B类也有setValue方法。因为在执行B类构造函数,所以默认先调用B类中方法,B类没有在调用A类。所以调用B类setValue(int value)方法	

在这里插入图片描述
4、执行super.setValue(10)

调用父类setValue(int value)方法,执行完,A类value =10,此时super(5)执行完毕

在这里插入图片描述
5、执行B类构造函数setValue(getValue() - 3 )
在这里插入图片描述
6、执行getValue(),因为B类没有getValue()方法,所以执行A类getValue()方法
在这里插入图片描述
7、执行A类getValue()方法

(1)value++;   //value++变成11
(2)return value;  //返回11保存在栈中
(3)因为没有异常,所以不用执行catch,最后执行finally

在这里插入图片描述
7、 finally里this.setValue(value),因为正在执行B类构造函数,所以this指的是B类,执行B类的setValue()方法
在这里插入图片描述
8、执行A类setValue(22)方法,执行完,A类value变成22
9、执行finally System.out.println(value);

输出22

10、执行B类构造函数setValue(getValue() - 3 ); 因为执行getValue()返回11,所以执行 setValue(8)

11、调用B类setValue(8)
在这里插入图片描述
12、调用A类setValue(16),执行完A类value为16,此时B类构造函数执行完毕

13、执行main函数new B().getValue()
在这里插入图片描述
14、调用A类getValue()方法

(1)value++; 执行完++,value = 17
(2)return value; 返回17保存在栈中
 (3)执行finally块this.setValue(value),第一次调用B类setValue(17),调用父类setValue(34),此时A类value为34
 (4)执行finally块ystem.out.println(value),输出结果为34

15、执行System.out.println(new B().getValue());

输出结果为17	 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值