一、final关键字的使用
final可以修饰的结果:类、方法、变量
final修饰的类:表示此类不能被继承。
比如:String、StringBuffer
final修饰的方法:表示此方法不能被重写
final修饰变量:既可以修饰成员变量,也可以修饰局部变量。此时的“变量”其实就是“常量”,一旦赋值就不可更改。
final修饰成员变量:哪些位置可以给成员变量赋值?
显示赋值
代码块中赋值
构造器中赋值
public class FinalTest {
public static void main(String[] args) {
E e = new E(4);
System.out.println(e.MIN_SCORE);
}
}
class E {
//成员变量
final int MIN_SCORE = 0;
final int MAX_SCORE = 100;
final int LEFT;
final int RIGHT;
{
LEFT=2;
}
public E(int right){
RIGHT=right;
}
}
final修饰局部变量:
方法内声明的局部变量:在调用局部变量之前,一定需要赋值。二千一旦赋值,就不可更改。
方法的形参:在调用此方法时,给形参进行赋值。二千一旦赋值,就不可更改。
final与static搭配,修饰成员变量时:此成员变量称为:全局常量。
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修饰,那么不能创建对象去调用,只能通过类名.属性名、类名.方法名去调用。