final关键字的作用
- final是一个关键字,表示最终的,不可变的
- final修饰的类无法被继承
- final修饰的方法无法被重写
- final修饰的局部变量一旦被赋值之后,不可重新赋值【不可二次赋值】
- final修饰的实例变量,必须手动赋值,不能采用系统默认值
- final修饰的引用,一旦指向某个对象之后,不能再指向其他对象,所以指向的对象无法被垃圾回收器回收,但是所指向的对象内部的内存是可以被修改的。
- final修饰的实例变量,一般和static联合使用,被称为常量。
final修饰的类无法被继承
public class FinalTest01 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
}
}
//正常情况下MyString类继承String类,但是在这里编译报错,因为String类被Final关键字修饰,无法被继承
class MyString extends String {
}
final修饰的方法无法被重写
public class A {
public final void m1(){
}
}
public class B extends A {
@Override
public void m1() { //重写父类方法m1,编译报错
}
}
final修饰的局部变量一旦被赋值之后,不可重新赋值【不可二次赋值】
public static void main(String[] args) {
// TODO 自动生成的方法存根
final int a;
//第一次赋值成功
a=100;
//第二次赋值编译报错
a=200;
}
final修饰的实例变量,必须手动赋值,不能采用系统默认值
public class C {
//没有final关键字修饰的实例变量没有赋值,编译正常
int i;
//有final关键字修饰的实例变量没有赋值,编译报错
final int id;
//有final关键字修饰的实例变量,并且手动赋值,编译正常
final int index =10;
}
final修饰的引用,一旦指向某个对象之后,不能再指向其他对象,但是所指向的对象内部的内存是可以被修改的。
public static void main(String[] args) {
final C c = new C(10);
System.out.println(c.id);//10
c.id=20;
System.out.println(c.id);//20
c = new C(20);//编译报错
}
final修饰的实例变量,一般和static联合使用,被称为常量。
public class FinalTest03 {
//常量 国籍
public static final String GUO_JI = "中国";
public static void main(String[] args) {
System.out.println(FinalTest03.GUO_JI);
}
}
知识拓展:eclipse怎么链接源码?
打开某个.class字节码文件,当没有看到源码的时候
点击"Attached Source":
- workspace…【源码在当前的工作区当中】
- External File…【源码在某个压缩包当中】
- External Folder…【源码在某个文件夹当中】
类库一般包括三个部门
- 源码【可以看源码来理解程序】
- 字节码【程序开发的过程中使用的就是这部分】
- 帮助文档【对开发提供帮助】
注意:尽量所有的程序都链接源码,养成看源代码的好习惯。