Final和Finally关键字

Final关键字 --修饰符

final修饰的类(无法被继承)

final修饰的方法(无法被覆盖,重写),但是可以被重载

final修饰的局部变量(只能赋一次值)

final修饰的引用一旦指向某个对象,则不能再指向其他对象,但是该引用指向的对象的内部数据是可以修改的

final防止指令重排序,保障多线程下的数据安全;

不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用);Final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法

Finally:关键字 --用于try catch语句中

finally 不管try catch执不执行,它一定会执行

进行IO操作一定要记住关闭连接

io操作:(内存从磁盘,内存从网络传输大量数据,都是以毫秒为单位的,磁盘转一圈5毫秒,内存到网络传输一般是一毫秒到几十毫秒)

作用:和网络相关,和IO相关的都需要建立连接的,这种连接是会占据存储内存空间的,所以需要关闭连接,finally块一般是用来关闭(释放)物理资源(数据库连接,网络连接,磁盘文件等

当try中有return时执行顺序:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)

总结:

try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:

情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。

情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。

情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况:

如果return的数据是基本数据类型,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值