Silly Java-Final 关键字

简介: Silly Java-Final 关键字

Final 关键字

  • adj. 最终的;最后的;决定性的;不可改变的

1.修饰变量

final variable 意味 【最后的变量,不可改变的变量即常量】 Java中该关键字即代表常量

 

  • 修饰基本类型的变量,在赋初始值之后就不能修改,否则会编译不通过。
  • 修饰引用类型变量,在初始化后不能指向另外的对象,否则会编译不通过。
  • 在给被final修饰的变量赋值的时候,可以在变量声明时赋值,也可以在构造方法中赋值。

应用场景:用final修饰将变量设置为常量,以后也不打算做修改,一般同static共用。

// 固定的业务场景代码
public static final String SERVICE_SCENE_CODE = "-1";
// 定义存储于Redis中的Key
public static final String TEST_REDIS_KEY = "TEST_REDIS_KEY_FINAL";

 

2.修饰方法

final method 意味 【最终的方法,不可被改变的方法】Java中该关键字即代表不可被改变的方法,即不能被子类重写,子类不能改变其原有意味。

 

  • 将一个方法定义为final方法,为了防止任何继承自他的子类修改它的含义。
  • 类的private方法会隐式地被指定为final方法。

 

3.修饰类

final class 意味 【最终的类,不可改变的类】Java中该关键字代表最终类,不能再‘繁衍后代了’即不能被继承。

 

  • 用final修饰一个类时,表明这个类不能被继承。
  • final类中的成员变量可以根据需要设为final。
  • final类中的所有成员方法都会被隐式地指定为final方法。

 

 1 // 被final修饰的class是最终类,不能被继承
 2 public final class FinalClass {
 3     // 被final修饰的常量可以在声明时赋值
 4     private final String str;
 5 
 6     public FinalClass() {
 7         str = "1.被final修饰的变量必须初始化,1.声明时赋值2.构造方法中赋值";
 8     }
 9 
10     public void testOut() {
11         System.out.println("3.被final修饰的方法不能被子类重写");
12     }
13 
14     public static void main(String[] args) {
15         // 1.final变量即最终变量不能被修改
16         FinalClass finalClass = new FinalClass();
17         System.out.println(finalClass.str);
18         // 被final修饰的引用类型变量,初始化后不能指向另一个对象,否则编译不通过
19         final Object finalObject = new Object();
20         // 试图修改后编译不通过
21         finalObject = new Object();
22         // 2.在变量创建的时候赋值
23         final String finalStr = "2.被final修饰的变量,再赋值后就是最终变量即常量,不能被修改";
24         System.out.println(finalStr);
25         // 3.final修饰的方法是最终方法不能被子类重写修改其意味
26         finalClass.testOut();
27     }
28 }
29 // 5.不能继承被final修饰的最终类,否则会编译不通过
30 class CantExtend extends FinalClass {
31     public String name;
32     // 4.试图重写父类中被final修饰的方法时会导致编译不通过
33     public void testOut() {
34         System.out.println("不能重写父类中final方法");
35     }
36 }


目录
相关文章
|
5月前
|
Java 开发者
Java中的并发编程:深入理解synchronized关键字
在Java并发编程的领域中,synchronized关键字是实现线程同步的基础工具之一。本文将深入剖析synchronized的作用机制,探讨其在多线程环境下确保数据一致性的重要性,并通过实际案例展示其应用。同时,文章还将比较synchronized与Lock接口的不同之处,以助于开发者更好地选择适合自己场景的同步策略。
|
5月前
|
存储 安全 Java
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
40 1
|
5月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
50 0
|
5月前
|
存储 SQL Java
Java实现关键字模糊查询的高效方法及实践
实现关键字模糊查询的方法有多种,每种方法都有其适用场景。在选择合适的方法时,应考虑实际需求、数据量大小、性能要求等因素。正则表达式适用于处理简单文本或小数据集;数据库模糊查询适用于存储在RDBMS中的数据;而第三方库,则适合需要进行复杂搜索的大型项目。选用合适的工具,可以有效提升搜索功能的性能和用户体验。
102 6
|
5月前
|
算法 Java API
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
|
5月前
|
缓存 安全 Java
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
78 4
|
5月前
|
安全 Java
Java面试题:解释synchronized关键字在Java内存模型中的语义
Java面试题:解释synchronized关键字在Java内存模型中的语义
48 1
|
5月前
|
设计模式 缓存 安全
Java面试题:工厂模式与内存泄漏防范?线程安全与volatile关键字的适用性?并发集合与线程池管理问题
Java面试题:工厂模式与内存泄漏防范?线程安全与volatile关键字的适用性?并发集合与线程池管理问题
61 1
|
5月前
|
存储 安全 Java
(二) 彻底理解Java并发编程之 Synchronized关键字实现原理剖析
Synchronized 关键字(互斥锁)原理,一线大厂不变的面试题,同时也是理解 Java 并发编程必不可少的一环!其中覆盖的知识面很多,需要理解的点也很多,本文会以相关书籍和结合自己的个人理解,从基础的应用范围到底层深入剖析的方式进行阐述,如果错误或疑问欢迎各位看官评论区留言纠正,谢谢!
105 0
|
5月前
|
存储 缓存 Java
(一) 玩命死磕Java内存模型(JMM)与 Volatile关键字底层原理
文章的阐述思路为:先阐述`JVM`内存模型、硬件与`OS`(操作系统)内存区域架构、`Java`多线程原理以及`Java`内存模型`JMM`之间的关联关系后,再对`Java`内存模型进行进一步剖析,毕竟许多小伙伴很容易将`Java`内存模型(`JMM`)和`JVM`内存模型的概念相互混淆,本文的目的就是帮助各位彻底理解`JMM`内存模型。
118 0