本章内容
- final关键字的描述
- final的使用方式
- 被final修饰的内容
- 使用final修饰后需要注意的问题
final关键字
概述: 由于Java当中提供了继承特性,子类可以在父类的基础上,改写父类的内容,比如:方法的重写,那么能不能随意的继承API当中提供的类呢?改写其内容呢?
显然是不行的,为了避免这种随意更改的情况,java提供了final关键字,用于修饰不可改变的内容。
final可以修饰哪些东西?
final:不可变,用于修饰列,方法,变量。
- 类:被final修饰的类,不可被继承
- 方法:被final修饰的方法,不能被重写
- 变量:被final修饰的变量,不能被重新赋值
使用方式
1. 修饰类
格式如下:
public final class 类名{
//类信息
}
通过查询API发现,JDK官方提供了很多的被final修饰的类如:String、Math、Scanner、Character等,这些类都被final修饰,目的是仅让我们使用,而不让我们更改其内容。
2. 修饰方法
格式如下:
修饰符 final 返回值类型 方法名(参数列表){
//方法体内容
}
如果强制重写final修饰的方法,编译无法通过。
3. 修饰变量
3.1 修饰局部变量—基本类型
基本数据类型的局部变量,被final修饰后,只能赋值一次,不能被改变。
public class Demo{
public static void main(String []args){
//声明局部变量
final int num;
//第一次赋值
num = 10;
//第二次赋值
num = 20;// 编译错误
}
}
3.2 修饰局部变量—引用类型
引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能发生改变,但是不影响对象内部的成员变量的修改。代码如下:
public class FinalDemo2{
public static void main(String []args){
//构建一个对象
final People p1 = new People();
pi = new People();//报错,编译无法通过
//调用setName()方法
p1.setName("小周");// 可以修改
}
}
3.3 修饰成员变量
如果final修饰成员变量,那么这个变量也是不可改变的。
- 成员变量具有默认值,但是使用final关键字修饰后,必须手动赋值,系统提供的默认值收回。
- 被final修饰的成员变量初始化有两种方式
1.显示初始化:
public class People{
final String name="小周";
}
2.构造方法赋值
public class People{
final Sreing name;
private int age;
public People(String name){
this.name=name;
}
}
注意事项
- 被final修饰的类,不能有子类,但是可以有父类,可以去继承其他的类
- 因为不能不能有子类,所以其中的所有成员方法都无法进行重写。
- 对于类和方法来说,abstract和final关键字不能同时使用,会产生矛盾。