final关键字

final 是 Java 中的一个关键字,简而言之,final 的作用意味着“这是无法改变的”。

final 关键字一共有三种用法,它可以用来修饰变量、方法或者类。

 (1)final 修饰变量

作用:这个变量一旦被赋值就不能被修改了,也就是说只能被赋值一次,如果我们尝试对一个已经赋值过 final 的变量再次赋值,就会报编译错误。

为什么要对某个变量去加 final 关键字呢?
  第一个目的是出于设计角度去考虑的,比如我们希望创建一个一旦被赋值就不能改变的量,那么就可以使用 final 关键字。比如声明常量的时候,通常都是带 final 的:这个时候其实 YEAR 是固定写死的,所以我们为了防止它被修改,就给它加上了 final 关键字,这样可以让这个常量更加清晰,也更不容易出错。
  第二个目的是线程安全的角度去考虑的。不可变的对象天生就是线程安全的,所以不需要我们额外进行同步等处理,这些开销是没有的。如果 final 修饰的是基本数据类型,那么它自然就具备了不可变这个性质,所以自动保证了线程安全。
final变量必须在声明时进行初始化,可以在声明时直接赋值或在构造函数中赋值。
final变量通常用大写字母命名,多个单词之间用下划线分隔。
(2)final修饰方法

  当应用于方法时,final关键字表示该方法不能被子类重写。即子类无法对final方法进行更改或扩展。

  final方法对于类设计的稳定性和安全性很有用,可以防止子类改变父类的关键逻辑

(3)final修饰类

  ·当应用于类时,表示该类不能被继承,即它是最终类,无法有子类(可以有父类)。

  ·final类通常用于安全或设计的考虑,防止其他类对其进行扩展或修改。

 

final、finally、finalize有什么区别?

1.final:

  (1)修饰符(关键字)如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承。因此一个类不能及被声明为abstract,又被声明为final的。

  (2)将变量或方法声明为final,可以保证他们使用中不被改变。被声明为final的变量必须在声明时给定初值,而以后的引用中只能读取,不可修改,被声明为final的方法也同样只能使用,不能重载。

2.finally:

  在异常处理时提供finally块来执行清楚操作。如果抛出一个异常,那么相匹配的catch语句就会执行,然后控制就会进入finally块,如果有的话。

3.finalize:

  是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。

  finalize是在Object类中定义的,因此,所有的类都继承了它。子类可以覆盖finalize()方法,来整理系统资源或者执行其他清理工作。

 

finally和return:

(1)2种finally不会执行的情况

  a.在try语句之前就return了

  b.try语句中有System.exit();语句

(2)finally语句在return执行之后,return返回之前执行

  说明:先执行了return 语句中的方法,然后返回值

(3)如果finally中有return语句

  说明:finally里的return直接返回了,就不管try中是否还有返回语句,这里还有个小细节需要注意,finally里加上return过后,finally外面的return b就变成不可到达语句了,也就是永远不能被执行到,所以需要注释掉否则编译器报错。

(4)如果finally语句中没有return语句覆盖返回值,那么原来的返回值可能因为finally里的修改而改变也可能不变。

(5)若发生异常,catch语句中的return语句和try中的return语句的情况一模一样

总结:finally语句在return执行之后,return返回之前执行

 

posted @ 2023-11-22 11:33  壹索007  阅读(36)  评论(0编辑  收藏  举报