final
关键字、修饰符 修饰数据、方法、类
1.最终值
- 当final修饰基本类型数据时,保证值不能改变
- 当final修饰引用类型数据时,地址值不能改变
- 当final修饰成员变量,保证对象创建完成之前给值
- 当final修饰静态变量(静态常量)时,保证类加载完成之前给值
代码演示1
package cn.tedu.finalx;
public class FinalDemo1 {
public static void main(String[] args) {
//当引用指向数据可以改变时,表明是变量
int x=1;
//当final修饰基本类型数据时,保证值不能改变
//当引用指向数据不能改变时,就是常量
final int i=1;//自定义常量
int j=i+1;
//i++;
//当final修饰引用类型数据时,是地址值不能改变
final int[] arr={1,2,3};
arr[0]=10;
//arr=new int[3];//报错
//数组长度是被final修饰,长度不能改变
//arr.length=10; // 报错
}
}
代码演示2
package cn.tedu.finalx;
public class FinalDemo2 {
}
class FDemo{
//保证类加载完成之前给值
final static int i;//静态常量
//静态代码块可以给静态变量进行初始化
static {
i=2;
}
//属性--成员变量
//保证对象创建完成之前给值
/*final int i;
{
i=2;
}*/
//保证每个构造方法都要赋值
/*public FDemo() {
i=2;
}
public FDemo(int j) {
i=j;
}*/
}
2.最终方法
支持重载
不支持重写
代码演示
package cn.tedu.finalx;
public class FinalDemo3 {
}
class FDemo1{
public final void n(){}
//支持重载
public final void n(int i){}
}
class FDemo2 extends FDemo1{
//@Override
//不支持重写
// public final void n(){}
}
3.最终类
可以继承别的类,但是不能被别的类继承
代码演示
package cn.tedu.finalx;
public class FinalDemo4 {
}
//最终类不能被继承
final class FDemo3{}
//最终类可以继承别的类
//class FDemo4 extends FDemo3{}