final是最终的意思,它是一个关键字也是一个修饰符
它可以修饰 数据、方法、类
1.final修饰数据
final修饰的是基本数据类型的时候,就是最终值不能发生改变(final修饰的数据可以先声明,再去赋值,只能赋值一次)
final int i=2; //i=4;//语句错误,final修饰变量的数据不能改变---最终值 final int j; //final修饰的数据可以先声明,再去赋值,只能赋值一次 j=6;
final修饰引用数据类型
final修饰引用数据类型,最终值就是引用的地址,地址值不能改变
final int[] arr= {1,2,3}; //元素值赋值,这个时候数组中的值是可以改变,那么final修饰的就不是数组元素的值 arr[2]=6; arr[0]=5; //arr=new int[5];//此语句错误,地址值发生改变。 //arr.length=5;//此语句错误,数组长度也是最终值。
final修饰成员变量的值
在创建对象前就要赋值(构造方法和构造代码块任选其一且只能赋值一次)
class A{ final int i; { i=4; //构造代码块中赋值 } public A() { //i=5; //构造代码块和构造函数赋值两者取其一 } }
static 和final共同修饰(最终静态):在类加载之前就要赋值且只要赋值一次
class A{ static final int i; static { i=4; } { } public A() { } }
2.final修饰方法
final 修饰方法那么这个方法可以重载和重写吗
扫描二维码关注公众号,回复:
6649754 查看本文章
可以重载
可以继承但是不能重写
class A{ //重载 public final void m() {} public final void m(int i) {} } class B extends A{ //注解判断是否可以重载 @Override //public final void m() {} //重载报错了 }
3.final修饰类
final修饰的类不能被继承,但是可以继承别的类
final class A{ //属性 String name; //方法 public void m() {} //无参构造 public A() { } } /*class B extends A{ //不能继承最终类A }*/