Java final关键字详解

简介: 1.final2.final修饰变量(1)final修饰局部变量(2)final修饰成员变量 3.final修饰方法

1.final

final关键字表示最终的、不可变的


final关键字可以用来修饰变量、成员方法和类


2.final修饰变量

(1)final修饰局部变量

当局部变量被final修饰,该局部变量一旦被赋值,就不能被更改

publicclassTest {
publicstaticvoidmain(String[] args) {
finalinta;
a=20;
System.out.println(a);
    }
}


e6379177ec7d45ff944fd673c5195c12.png

对于基本类型,final修饰的变量的数值不可改变


对于引用类型,final修饰的变量的地址值不可改变


例如:定义一个Person类

publicclassPerson {
privateStringname;
privateintage;
publicPerson(){}
publicPerson(Stringname, intage) {
this.name=name;
this.age=age;
    }
publicStringgetName() {
returnname;
    }
publicvoidsetName(Stringname) {
this.name=name;
    }
publicintgetAge() {
returnage;
    }
publicvoidsetAge(intage) {
this.age=age;
    }
@OverridepublicStringtoString() {
return"Person{"+"name='"+name+'\''+", age="+age+'}';
    }
}


创建final修饰的对象后,地址值不能改变


d474f7265b854e8d95ff61f5c65504c9.png


其中的内容可以进行修改

publicclassTest {
publicstaticvoidmain(String[] args) {
finalPersonp=newPerson("张三",20);
p.setAge(30);
p.setName("李四");
System.out.println(p);
    }
}


(2)final修饰成员变量

当final修饰成员变量时,该变量也是不可被改变的


成员变量具有初始值,因此在使用final修饰后必须手动赋值,不会再给初始值


e193b0bbf40b4e34bb101d882f2209c1.png

且不能使用set方法进行修改

1c22ac9841ff42f3b78b1fbe4e9c7ed2.png

可以直接赋值或是通过构造方法赋值(两种方法任选一种)


直接赋值后则不能通过构造方法赋值,也不能使用set方法对变量进行修改

939aafce2dc544de86087f169cc1bf13.png


若是选择通过构造方法赋值,必须保证所有重载的构造方法,都对final修饰的成员变量赋值

1475022abcbb445bb503a1332bc10f17.png


3.final修饰方法

当final修饰方法时,该方法即为最终方法(不能被重写)


例如:定义一个Person类

publicclassPerson {
privateStringname;
publicPerson(){}
publicPerson(Stringname) {
this.name=name;
    }
publicStringgetName() {
returnname;
    }
publicvoidsetName(Stringname) {
this.name=name;
    }
publicfinalvoidsleep(){
System.out.println(this.name+"正在睡觉");
    }
}


定义Student类继承Person类

289b60086d614bee96fc3b869cf728b2.png


3.final修饰类


当final修饰类时,该类不能有任何子类


例如:用final修饰Animal类

finalclassAnimal{
Stringname;
intage;
publicvoideat(){
    }
}


则Cat类无法继承Animal类


29c547f7536f400596408855283c13b3.png


注:对于类和方法,abstract关键字不能与final同时使用。因为抽象方法必须被子类重写,而被final修饰的方法不能被重写

edc9c7948f874361833633caf626cb33.png

目录
相关文章
|
2月前
|
存储 安全 Java
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
24 1
|
2月前
|
Java 开发者
Java中的并发编程:深入理解synchronized关键字
在Java并发编程的领域中,synchronized关键字是实现线程同步的基础工具之一。本文将深入剖析synchronized的作用机制,探讨其在多线程环境下确保数据一致性的重要性,并通过实际案例展示其应用。同时,文章还将比较synchronized与Lock接口的不同之处,以助于开发者更好地选择适合自己场景的同步策略。
|
2月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
24 0
|
1月前
|
前端开发 JavaScript Java
【前端学java】java中final修饰符(6)
【8月更文挑战第9天】java中final修饰符(6)
29 2
|
1月前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
95 1
|
2月前
|
存储 SQL Java
Java实现关键字模糊查询的高效方法及实践
实现关键字模糊查询的方法有多种,每种方法都有其适用场景。在选择合适的方法时,应考虑实际需求、数据量大小、性能要求等因素。正则表达式适用于处理简单文本或小数据集;数据库模糊查询适用于存储在RDBMS中的数据;而第三方库,则适合需要进行复杂搜索的大型项目。选用合适的工具,可以有效提升搜索功能的性能和用户体验。
53 6
|
29天前
|
XML SQL Java
|
30天前
|
存储 Java 对象存储
【Java基础面试四十三】、 static和final有什么区别?
由于网络原因,我无法获取到您提供的链接内容。如果需要我解析该网页,请确保链接有效并重试,或者提供其他问题,我会尽力帮助您。
|
2月前
|
算法 Java API
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
|
2月前
|
缓存 安全 Java
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
55 4