Final修饰符
修饰变量
public class Final {
public static void main(String[] args) {
//第一种情况
//final修饰一个变量,变量的值不可以改变,这个变量也成了一个字符常量,名字大写
final int A = 10;//final修饰基本数据类型
//A = 20; 报错,不可以修改值
//第二种情况
final Dog d = new Dog();//final修饰引用数据类型,地址值不可以改变
//d = new Dog();报错-->地址值不可以更改
//d对象的属性依然可以改变
d.age = 10;
d.weight = 10.4;
//第三种情况
final Dog d2 = new Dog();
a(d2);//d没被final修饰,不影响d2的传入和新的对象的创建
//第四种情况
final Dog d3 = new Dog();
}
public static void a(Dog d){
d = new Dog();
}
public static void b(final Dog d){//d被final修饰,指向不可以改变
//d = new Dog();
}
}
修饰方法
被final修饰的方法不可以被该类的子类重写
public class Person {
public final void eat(){
System.out.println("吃饭");
}
}
class Student extends Person{
@Override
public void eat() {//报错,不能被重写
super.eat();
}
}
修饰类
final修饰类,代表该类不可以被子类继承
案例
JDK提供的Math类:
- 使用Math类时无需导包,直接使用即可
- Math不能被其他类继承
- Math类中的属性全部被final修饰,方法也是被final修饰的(被省略)
- 外界不可以创建对象(构造器被private修饰)
- Math类中的所有的属性,方法都被static修饰,可以通过类名.属性名或者类名.方法名调用