final关键字-终结器(表示有最终的,不可修改的含义)
1.final修饰类(String类以及8大基本数据类型包装类)
当一个类被final关键字修饰,表示该类不能拥有子类(该类不允许被继承)
一旦一个类被final修饰,该类的所有方法都会默认加上final。(成员变量(属性)不会加final)
final class Person{}
class Student extends Person{} //继承一个被final修饰的类
public class test{
public static void main(String[] args){
new Student();
}
}
2.final修饰方法
当一个方法被final修饰,明确表明该方法不能被覆写
当一个方法被private修饰后,相当于加了final关键字
当一个类中的所有方法都被final修饰后,这个类还是可以被继承的
class Person{
public final void fun(){}
}
class Student extends Person{
public void fun(){} //覆写父类的方法
}
public class test{
public static void main(String[] args){
new Student();
}
}
3.final修饰属性-常量
a.final修饰普通数据类型的成员变量(最主要的用途)
被final修饰的成员变量必须在声明时初始化(构造快或构造方法中初始化),并且初始化后值无法被修改。
class Person{
public final int a = 5; //声明的时候初始化
// public Person(){
// a = 5; //构造方法中初始化
// }
// {
// a = 5; //构造快中初始化
// }
}
public class test{
public static void main(String[] args){
System.out.println(new Person().a);
}
}
注意:在主方法中不能用static修饰变量
final 变量-常量(值不能改变,每个对象都有自己的final变量,在对象产生时初始化)
static final - 全局常量(所有对象共享此变量,并且在类加载时初始化,效率较高,通过类名调用)(声明时或者静态块初始化)(推荐)
class Person{
public final int a = 5;
public staic final int b = 10;
}
b.final修饰引用数据类型的变量(值不能改变)
被final修饰的变量,值不能变,类型也不能改变
数据类型的转换:
class Person{
byte b1=2, b2=2, b5, b8;
final byte b3=4, b4=5, b7=8;
public void fun(){
//语句1
b5 = b1+b2; //b5是byte型,b1和b2会转为int型
//语句2
b8 = b3+b4; //正确
//语句3
b3 = b1+b5; //b3为byte型,值不能被改变
//语句4
b5 = b3+b8; //b5为byte型,b8会变为int型(必须强转)
}
}