基本用法:final(最终的,不可更改的) 用于声明属性,方法和类。
1.修饰类:不能被定义为抽象类或是接口,不能被其他类继承。
2.修饰方法:修饰的方法在子类中不能重写。
3.修饰属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。
案例:
public class Car {
/*
static final int count = 10;因为在定义之初就为其赋值,那么所有对象不能改变其值,建议用static修饰
*/
static final int count = 10;
/*
final int num;在定义之初没有对其赋值,所以必须在构造方法中赋值
*/
final int num;
public Car(int num) {
this.num=num;
}
//定义一个final修饰的方法,该方法在子类中不能被重写
public final void run(){
}
}
public class BMW extends Car{
/*重写父类中的run()方法会报错
@Override
public void run(){
}
*/
}
内存图:
final int count = 10;① final int num;②
①在每个对象中都一样,所以若①不加static修饰,每创建一个对象final int count = 10;都会在堆中复制一份,浪费内存,所以建议在①前加static修饰,这样①就只方法区存一份,节省内存;因为②是通过构造方法为其赋值,所以②在每个对象中值可以不一样,前边就不用加static修饰。
不加static:
加static: