基础
题目1
请简述下述程序打印结果,以及原因?
结果如下
1. year 的值未改变(输出 20)
- 传递方式:
int是值类型,参数通过值传递(复制一份数据到方法内)。 - 行为:
UpdateValue方法内修改的是year的副本,不影响外部的原始变量。- 方法调用结束后,外部的
year仍为20。
2. user.Name 和 user.Age 被修改(输出 Jane 和 27)
- 传递方式:
User是引用类型,参数通过引用传递(传递引用的副本)。 - 行为:
UpdateValue方法内通过引用的副本修改了堆上的对象属性。- 外部的
user和方法的user参数指向同一个堆对象,因此属性变更对外部可见。
题目2
请简述下述程序打印结果,以及原因?
结果如下
-
当 num = 0 时:
- 10/0 会抛出除零异常
- catch块执行: num++ 使 num=1,打印"Fn-1"
- finally块执行: num++ 使 num=2,打印"Fn-2"
- 返回catch块的值1(catch中的return值)
-
当 num = 1 时:
- 10/1 = 10,正常执行
- finally块执行: num++ 使 num=11,打印"Fn-11"
- 返回try块的值10(try中的return值)
需要注意:
- finally块总是会执行
- return值取决于是从try还是catch块返回,finally中的num++不影响返回值