final修饰符
关于java语言当中final关键字:
final是个关键字,表示”最终的,不可变的”
final修饰的类无法被继承
final class Animal { } /* // 编译报错 class Cat extends Animal { } */ // //正确写法(Cat无法继承Animal): class Cat{ }
final修饰的方法无法被重写/覆盖
class a { public final void b() { System.out.println("HelloWold!"); } } class b extends a{ public void b() { // 'b()' 无法重写 'study_exercise.objectexercise.exercisefinal.a' 中的 'b()';重写的方法为 final } }
final修饰的变量一旦之后,不可重新赋值【不可二次赋值】
// 第一种写法 final int a = 10; // a = 15; // 无法将值赋给 final 变量 'a' // 第二种写法: final int b; b=10;
final修饰的实例变量:
综合考虑,java语言最终规定实例变量使用final修饰之后,必须手动赋值,不能采用系统默认值。
因为默认构造函数在构造方法时候会将成员变量赋值所以Sun公司综合考虑让开发人员自行赋值,否则会编译错误!
两种写法:
// 第一种写法: final int a = 10; // 第二种写法: final int b; public Test() { this.b=100; } /** 总结以上两种写法: * 第一种写法: * - 直接将成员变量直接赋值给了a,但是程序执行这句话实际是在构造函数中执行进行赋值的. * 第二种写法: * - 直接在构造函数中赋值 * 总结: * 以上两种情况其实在程序运行过程中都一样,只不过一个直接赋值一个写在构造函数中. */
final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收。
注意:final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的。
例如:// 加final实例化对象 final Animal animal1 = new Animal(10); // animal1 = new Animal(20); // 编译报错:一旦使用final创建对象不能,不能指向其他对象 System.out.println(animal1.a); animal1.a=2300; System.out.println(animal1.a); /** * 总结: * final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的。 */
final用法之常量的使用:
常量的定义语法格式:
public final static 类型 常量名 = 值; // 提示:Java规范中要求所有常量的名字全部大写,每个单词之问使用下划线_连接