java-final关键字的使用

xiaoxiao2021-03-01  18

一、final关键字修饰类二、final修饰方法一、final修饰变量 final 关键字修饰成员变量final修饰一般变量

一、final关键字修饰类

final关键字可以修饰一般类,但是不能修饰抽象类和接口;其中被final修饰的类不可被继承。

//错误案例,下面这个在类验证阶段就会出错 public final class Father { } class Son extends Father{ } //final不能修饰抽象类、编译时报错 public final abstract class FinalAbstractClassTest { } //final不能修饰接口、编译时报错 public final interface FinalAbstractClassTest { }

二、final修饰方法

被final修饰的方法不能被子类覆写,否则会编译出错

//Man覆写了父类的被final修饰的方法,编译时报错 public class Human { public final void sayHello(){ } } class Man extends Human{ @Override public final void sayHello(){ } }

final不能修饰抽象类的抽象方法和接口中的方法

//错误案例final不能修饰接口中的方法 public interface FinalAbstractClassTest { public final void sayHello(); } //错误案例:final不能修饰抽象方法 public abstract class FinalAbstractClassTest { public final abstract void sayHello(){} }

一、final修饰变量

final 关键字修饰成员变量

被final修饰的成员变量要么我们显示的为该变量初始化值,或者用构造器方法进行初始化,否则会出错;而且一旦赋值,变不能再修改值或者是引用(不能有setters方法)。

//正确方式一 public class FinalClass { public final int a; public FinalClass(int a) { this.a = a; } } //正确方式二 public class FinalClass { public final int a = 1; public FinalClass() { } } //错误的是final修饰的成员变量不能有setter方法 public class FinalClass { public final int a; public FinalClass(int a) { this.a = a; } //错误原因是不能被改变 public void setA(int a){ this.a = a; } }
final修饰一般变量

如果final修饰的是基本类型的变量,那么一旦复制,就不能再更改值,如果final修饰的是引用变量,那么一旦指明变量的引用地址,就不能再更改。

//错误案例:不能修改被final修饰的基本变量变量 public class FinalClass { public static void main(String[] args) { final int i = 1; i++;// } } //错误案例:不能将final修饰的引用变量重新指向新的对象 public class FinalClass { public static void main(String[] args) { final Map<Integer, Integer> map = new HashMap<Integer, Integer>(); map = new HashMap<Integer, Integer>();//错误 } } /*正确案例:被final修饰的变量只是不能被修改引用指向其他新的地址, ** 但是可以改变引用对象中属性的值(前提是这个属性不是final修饰的) */ public class FinalClass { public static void main(String[] args) { final Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int i = 0;i<3;i++){ map.put(i,i); } } }

总结:

final修饰类:final关键字可以修饰一般类,但是不能修饰抽象类和接口;而且被final修饰的类不可被继承final修饰方法:被final修饰的方法不能被子类覆写,否则会编译出错;final不能修饰抽象类的抽象方法和接口中的方法final修饰成员变量:被final修饰的成员变量要么我们显示的为该变量初始化值,或者用构造器方法进行初始化,否则会出错;而且一旦赋值,变不能再修改值或者是引用(不能有setters方法)final修饰一般变量:如果final修饰的是基本类型的变量,那么一旦复制,就不能再更改值,如果final修饰的是引用变量,那么一旦指明变量的引用地址,就不能再更改;但是我们可以更改引用对象的成员变量非final的值。
转载请注明原文地址: https://www.6miu.com/read-4050022.html

最新回复(0)