一、概述final是JAVA关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思 。
有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在 。
finally关键字不同于final关键字,这是一个需要与异常体系结构配合使用的关键字,旨在定义必须要进行操作,一般用于在发生异常的时候进行一些收尾操作,比如释放资源等 。
另外还有个finalized,它是一个方法,它需要与垃圾收集体系配合使用 。主要在对象被垃圾收集之前进行一些操作,这些操作只会被执行一次,即使一个对象多次被标记为下次进行垃圾收集,也只有第一次会执行 。
二、final作用2.1 final修饰变量变量被final修饰就会变成为常量,常量被保存在方法区中 。
变量一旦被final修饰,必须手动进行初始化,未进行初始化的final常量是无法通过编译的 。
如果只有final修饰的变量的初始化可以采用:
- 定义时赋值
- 代码块赋值
- 构造器赋值
- 定义时赋值
- 静态代码块赋值
public class FinalTest {final int i = 1;int j = 2;static int m = 3;static final int n = 4;}
或public class FinalTest {final int i;int j;static int m;static final int n;{i = 1;}static {n = 3;}}
如果将上面的代码改成:public class FinalTest {final int i;//2-int j;static int m;static final int n;//5-}
上面代码第2行和第5行会报错,原因就是未进行初始化 。那么我们总结下final和static的现象,用于区分二者:
- static修饰将内容脱离对象成为类成员 。
- final修饰将内容改造成必须被手动初始化的成员,一旦赋值,不再改变 。
二者可以同时存在,各起各的作用 。
2.2 final修饰方法被final修饰的方法,可以被子类继承,但是不能被子类重写,也就是说这个方法在此以后其内部的实现就是固定不变的了,不能被改变 。
2.3 final修饰类被final修饰的类,被称之为最终类,其不再拥有子类,不可再进行扩展,最常见的final类就是String类 。
String类被final修饰之后,其每个对象都是不变的,一旦定义就不再发生改变 。
2.4 final修饰局部变量final修饰的局部变量,该变量就不再是保存在栈空间中,而是保存在方法区中,不会随方法结束而失效,放大了局部变量的生命周期 。
最常使用的地方就是局部内部类在访问方法的局部变量的情况下,这些局部变量就需要使用final修饰,因为当局部内部类访问局部变量时,会放大局部变量的作用域,局部变量一般在方法结束时就失效了,但是却有可能任然被内部类的对象持有使用 。将该局部变量定义为final之后,它不再保存于栈空间,而是保存在方法区中,自然不会因为方法的结束而丢失 。
public class FinalTest{public void outMethod(){final int s = 1;// 3-class innerClass{public void innerMethod(){System.out.println(s);}}}}
如果去掉第3行的final,第5行就会报错 。2.5 final修饰方法参数如果方法的参数被final修饰,那么这个参数的值在从方法调用时赋值开始就不能再改变,不能被重新赋值(不能改成他值) 。
public class FinalTest{public void outMethod(final int s){s = 1;}}
如上代码,方法参数s为final的,那么若去掉第2行的代码,为s重新赋值,则会报错 。三、finally作用finally只有一种用法,那就是在try...catch..语句末尾使用 。语法如下:
public class FinallyTest{public void test(){try{//someExecute}catch(Exception e){//someExecute}finally{//someExecute}}}
finally块中的语句是一定会被执行的,无论是否会发生异常,重点:这里的异常指的是在try块中的部分,如果实在try块之前发生了异常,还没来得及执行try块语句,那么finally块中的内容也不会被执行,所以finally针对的是try块中的内容而设的 。
推荐阅读
- CAD小白基础题
- 前端新手必备常用JavaScript方法函数大全
- netty系列之:性能为王!创建多路复用http2服务器
- Java设计模式之观察者模式
- 天玑9000|天玑9000之王!vivo X80系列卖爆:获3500-6000价位段销量冠军
- 基础力量应该如何训练?
- java开发之Java ORM 框架推荐
- 知道这些关于电脑的基础知识,可以让你的电脑变得更好用
- Java高级用法,写个代理侵入你 ?
- 普洱属于红茶系列吗,普洱属于黑茶吗篇文章教你区分普洱和黑茶