一、知识清单
1、final可以用来修饰的结构: 类 ( 包 括 内 部 类 ) 、 方 法 、 变 量 \color{HotPink}{类(包括内部类)、方法、变量} 类(包括内部类)、方法、变量
2、final用来修饰一个类(俗称太监类):
此
类
不
能
被
其
他
类
继
承
\color{HotPink}{此类不能被其他类继承}
此类不能被其他类继承比如:String类、System类、StringBuffer类
3、final用来修饰一个方法:
表
明
此
方
法
不
可
以
被
重
写
\color{HotPink}{表明此方法不可以被重写}
表明此方法不可以被重写比如:Object类中的getClass();
4、final用来修饰变量:
此
时
的
变
量
称
为
是
一
个
常
量
\color{HotPink}{此时的变量称为是一个常量}
此时的变量称为是一个常量一旦被分配内存空间就必须初始化并且以后不可变。
- final修饰属性
- 可以考虑赋值的位置有:显示初始化、代码块中初始化、构造器中初始化(每个构造器中都应该对其进行初始化,因为你不知道调用哪个构造器,如果有一个构造器你没初始化被调用了,那么这个常量就是没赋值)
- final也不能通过set/get或者其它方法进行赋值,因为当类被加载进内存的时候,这个属性并没有给其分配内存空间,而只是定义了一个变量,只有当类被实例化的时候这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存空间的时候就需要初始化,以后不再改变的条件。通过set/get只能修改变量的值。
- final修饰的变量不能执行默认初始化,即final int val;错误
- final修饰局部变量
- 尤其是使用final修饰形参时,表名此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体中使用此形参,但不能重新赋值。
5、
static可以修饰:属性、方法、代码块、内部类
final可以修饰:属性、方法、类(包括内部类)
static final 修饰(两者共同的部分):修饰属性、方法、内部类
static fianl 用来修饰属性:称为全局常量
二、代码演示
public class FinalTest {
final int WIDTH=0;
final int LEFT;
final int RIGHT;
// final int DOWN;
//代码块进行初始化
{
LEFT=1;
}
//构造器进行初始化(每个构造器中都要写)
public FinalTest(){
RIGHT=2;
}
public FinalTest(int n){
RIGHT=2;
}
//set/get方法中不可以赋值
// public void setDown(int down){
// this.DOWN=down;
// }
public void show(){
final int NUM=10;//常量
// NUM+=20;
}
public void show(final int num){
// num=20;//编译不通过
System.out.println(num);
}
public static void main(String[] args) {
int num=10;
num+=5;
FinalTest test=new FinalTest();
// test.setDown(3);
test.show(10);
}
//final可以修饰内部类
final class Dabao{
}
//static可以修饰内部类
static class Biu{
}
}
//final修饰的类不可以被继承
//final class FinalA{
//
//}
//class B extends FinalA{
//
//}
class AA{
public final void show(){
}
}
//final修饰的方法不可以被重写
//class BB extends AA{
// //Cannot override the final method from AA
// public final void show(){
//
// }
//}