一、final
可以修饰变量、方法、类
1、修饰变量
final修饰一个变量,变量的值不可以改变,这个变量就变成一个字符常量,约定俗称的规定:名字大写。
final修饰引用数据类型,那么地址值就不可以改变
package com.msb_final;
public class Test {
public static void main(String[] args) {
//第一种情况
//todo final修饰一个变量,变量的值不可以改变,这个变量就变成一个字符常量,约定俗称的规定:名字大写
final int A =10;
// a =20;报错,不可以修改
//第二种情况
final Dog d = new Dog();//todo final修饰引用数据类型,那么地址值就不可以改变
//d = new Dog() 地址值不可以改变
//d对象的属性依然可以改变
}
public static void a(Dog d){
d=new Dog();
}
}
2、修饰方法
final修饰方法,那么这个方法不可以被该类的子类重写;
3、修饰类
代表没有子类,该类不可以被继承,一旦一个类被final修饰,那么里面的方法没有必要被final修饰了。
4、案例
JDK提供的Math类,看源码发现:
a、使用Math类的时候无序导包,直接使用即可。
package java.lang;
b、Math类没有子类,不能被其他的类继承。
c、里面的属性全部被final修,方法也是被final修饰,只是省略不写,因为子类没有必要重写。
d、外界不可以实例化对象
e、发现Math类中所有的属性和方法都被static修饰,那么不能创建对象去调用,只能通过类名.属性名、类名.方法名去调用。