final关键字(final是最终的)
1.final修饰特点
a.修饰类,类不能被继承
b.修饰变量,变量就变成了常量,
修饰基本数据类:final int num = 10;
修饰引用数据类型变量只能始终指向一个对象,不能再指向其他对象
即 基本类型,是值不能被改变(报错无法为最终变量NUM分配值)
引用类型,是地址值不能被改变,对象中的属性可以改变
c.修饰方法,方法不能被重写
2.final关键字修饰局部变量
a.修饰基本类型,是值不能被改变(报错无法为最终变量NUM分配值)
b.修饰引用类型,是地址值不能被改变,对象中的属性可以改变
例:
class bj08_20 {
public static void main(String[] args) {
//final修饰基本数据类型
final int NUM = 10;
System.out.println(NUM);
//final修饰引用数据类型
final Person p = new Person("张三",23);
//p里面是个地址值
//p = new Person("李四",24);再次改变p值是不允许的,可以改变对象的属性值
p.setName("李四");
p.setAge(24);
System.out.println(p.getName() + "..." + p.getAge());
method(10);
method(20);//之前method弹栈消失了
}
public static void method(final int x) { //方法声明上final修饰的
System.out.println(x);
}
}
3.final修饰变量的初始化时机
1)final修饰变量的初始化时机----有几种初始化的方法
a.显示初始化:final int num = 10;
b.在对象构造完毕前即可(构造方法初始化)
注意:
final修饰方法不可以被其他重写 public final void print() {}不希望任何方法被重写,就把类定义成final class Father{}
写了一些方法后不想让子类改变了.
例:
class Demo {
int num;
}
Demo d = new Demo();
在创建对象时,num会默认初始化值0
final修饰的值只能被赋值一次,成员变量的默认初始化值是无效值(有默认初始化值),所以一定要进行显示初始化值(赋值)(即final num = 10).若果没有进行赋值,会报错:可能尚未初始化变量num.
例:
class Demo {
final int num;
public Demo {
num = 10;//在在对象构造完毕前即可
}
}
Demo d = new Demo();