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中改变后的该属性的值。