难度
初级
学习时间
10分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
友情提示
- 本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
- 本章内容针对零基础或基础较差的同学比较友好,可能对于有基础的同学来说很简单,希望大家可以根据自己的实际情况选择继续看完或等待看下一篇文章。谢谢大家的谅解!
1.finally代码块作用域
首先,我们来看看finally代码块作用域是哪一块:

上图中红色左大括号和右大括号包裹的部分就是finally代码块作用域。
2. finally 作用域内中的成员只在该作用域内有效
什么叫“finally作用域内中的成员只在该作用域内有效”?
就是声明和定义在finally代码块中的变量只在finally代码块中有效,出了finally代码块就不能被使用。
下面通过一个例子来说明。
演示:
请在finally代码块中定义一个变量x。
请在finally代码块中访问这个变量x。
请观察程序运行结果。
代码:
Main类:

结果:

从运行结果来看,程序没有任何问题,结果也符合预期。简单的来看一下程序代码。
我们使用的是try-catch-finally代码结构,在try代码块里面什么也没做,只打印了一句话,证明try代码块被执行了:

执行结果:

然后,我们在catch代码块里面捕获了算术异常,虽然try代码块里面不会发生异常,但是我们还是写了catch代码块:

接着,我们直接在finally代码块里面定义了变量x:

然后,我们在finally代码块里面访问了它:

执行结果:

由此可见,我们在finally代码块里面直接访问finally代码块里面的成员是可以的。
接下来,我们试试外finally代码块之外能不能访问此变量x。
3. finally 代码块内的成员不能被外部访问
演示:
请在finally代码块中定义一个变量x。
请在finally代码块外访问这个变量x。
请观察程序运行结果。
代码:
Main类:

结果:

错误信息:

文字版:
从运行结果来看,程序出现了错误。来简单看看程序代码。
try代码块和catch代码块和上一小节中一样,这里不再赘述。
首先,我们在finally代码块里面定义了变量x:

接着,我们在finally代码块之外访问了变量x:

执行结果:

程序说找不到这个变量x,在Main类的23行,该行正是我们使用变量x所在的行。由此可见,我们在finally代码块中定义的成员不能在finally代码块之外使用。
4. finally 代码块之外定义的成员是可以在 finally 代码块里面被访问
我们在finally代码块里面定义的变量不能在finally代码块之外使用,如果事先定义好变量,然后被finally代码块访问改变其值,之后再使用该变量,请问值改变了吗?
我们来一个例子演示一下。
演示:
请在finally代码块外定义一个变量x。
请在finally代码块中访问这个变量x,然后改变其值。
接着,在finally代码块之外访问变量x。
请观察程序运行结果。
代码:
Main类:

结果:

从运行结果来看,程序没有问题。我们来看一下该程序代码。
首先,我们在finally代码块之外定义了一个变量x:

try代码块和catch代码块前面小节描述过,这里就不再赘述。
接着,我们在finally代码块里面改变这个变量x:

接着,我们在finally代码块之外访问这个变量x:

执行结果:

由此可见,当我们事先在finally代码块之外定义变量x,然后经过finally代码块访问之后,再去顺着程序流程往下访问它是可以的。
5.定义在try代码块中的变量可以在finally代码块中访问吗?
try代码块有自己的作用域,在try代码块里面定义的成员只能在try代码块中被访问。我们定义在try代码块里面的成员不能被finally代码块访问。
6.定义在catch代码块中的变量可以在finally代码块中访问吗?
同样的,catch代码块有自己的作用域,在catch代码块里面定义的成员只能在catch代码块中被访问。我们定义在catch代码块里面的成员不能被finally代码块访问。
总结
- 定义在finally代码块内的成员只能在本作用域中被访问。
- 定义在finally代码块外的成员可以被finally代码块访问。
至此,Java中finally代码块作用域相关内容讲解先告一段落,更多内容请持续关注。
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
下一章
“全栈2019”Java异常第七章:try-catch-finally组合方式
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师 学习计划
关注我们,加入“全栈工程师学习计划”。

版权声明
原创不易,未经允许不得转载!