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

目录
相关文章
|
4天前
|
缓存 Java 程序员
深入理解Java关键字volatile(上)
深入理解Java关键字volatile
12 0
|
5天前
|
Java API
【JAVA】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
2天前
|
Java
final 在 java 中有什么作用?
final 在 java 中有什么作用?
|
2天前
|
存储 安全 Java
【亮剑】Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。
|
3天前
|
Java 编译器
【Java探索之旅】this 关键字 解决你的成员变量困惑
【Java探索之旅】this 关键字 解决你的成员变量困惑
11 0
|
3天前
|
Java
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
5 0
|
3天前
|
Java
Java里的关键字 __final
Java里的关键字 __final
|
4天前
|
缓存 Java
深入理解Java关键字volatile(下)
深入理解Java关键字volatile(下)
6 0
|
5天前
|
Java 编译器
【JAVA】volatile 关键字的作用
【JAVA】volatile 关键字的作用
|
6天前
|
Java
【JAVA面试题】final关键字的作用有哪些
【JAVA面试题】final关键字的作用有哪些