关于final关键字的基础运用

Isleta ·
更新时间:2024-11-13
· 935 次阅读

关于final关键字的基础运用

首先明确final的含义:最终,不可改变的

final的四种基本用法

1.修饰一个类

格式: 权限修饰符 final 类名{ //*** }

此时final的含义是声明:当前这个类不能有任何的子类,也就是说该类的所有成员方法均不可以被覆盖重写,但可以对自己所继承父类的方法进行覆盖重写!!!
2.修饰一个方法

格式: 权限修饰符 final 返回值类型 方法名(参数列表){ //*** }

此时final的含义是声明:当前这个方法不能被覆盖重写,但不会对所在类其他方法产生影响,即为最终方法
注意:对于类和方法来说,final和abstract不能同时使用,因为矛盾——抽象方法所在类必须是抽象类,其方法没有内容,必须进行重写,而重写就需要子类,与final使用条件矛盾!!!
3.修饰一个成员变量

权限修饰符 final 变量名;

此时final的含义是声明:此变量不能再进行更改,只能赋值一次。

final int a; a=30;//正确 final int b=30;//正确

注意:
对于基本类型来说,不可更改是指的是变量的数值不可变;
对于引用类型来说,不可更改是指的是变量的地址值不可变。

//参考代码 class 项目二 { public static void main(String[] args) { Student one=new Student("友人A"); System.out.println(one.getName());//输出友人A System.out.println(one);//Student@10f87f48 one=new Student("宫园熏"); System.out.println(one.getName());//输出宫园熏 System.out.println(one);//Student@b4c966a } } class Student{ private String name; public Student() { } public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

但是

final Student one=new Student("友人A"); one=new Student("宫园熏");//错误

因为引用变量改变的是地址,地址在此情况中不可改变,但可以直接改变内容

final Student one=new Student("友人A"); one=one.setName("宫园熏");//错误 one.setName("宫园熏");//正确 System.out.println(one.getName());//宫园熏

4.修饰一个局部变量

格式: 权限修饰符 final 变量名=赋值内容;

此时final的含义是声明:变量不可更改。
注意:由于局部变量具有默认值(如string为null,int为0),此默认值相当于对变量进行一次赋值,会导致变量不可用,为了避免错误,必须要进行手动赋值

private final String name1="有马公生";//正确 private final String name2;//错误,name2的值为null name="友人A";//错误

如果变量被final修饰,直接赋值和构造方法赋值二选一

private final String name="有马公生"; /*public Student(String name) { this.name = name; }*/会报错 private final String name;//正确,必须保证类当中所有的重载 //构造方法对final的所有成员变量赋值 public Student() { this.name=赋值内容; } public Student(String name) { this.name = name; } /* public void setName(String name) { this.name = name; }*/同时将set方法删去
作者:astudycat



final

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章