/**
* 关于Java语言当中final关键字:
* 1、final是一个关键字,直译"最终的",表示不可变的。
* 2、final修饰的类无法被继承
* 3、final修饰的方法无法被覆盖
* 4、final修饰的变量一旦赋值之后,不可重新赋值
* 5、final修饰的实例变量必须手动赋值,不能采用系统默认值
* 6、final修饰的引用一旦指向某个对象了,不能指向其它的对象,那么被指向的对象无法被垃圾回收器回收。
* final修饰的引用虽然指向某个对象之后不能在指向其他对象,但所指对象的内容是可以别修改的
* 7、final修饰的实例变量,一般和static联合使用被称为“常量”。
*/
String.class也被final修饰,不能被别的子类继承
(以下编译错误)
public final class String
class MyString extends String {
//编译报错,不能继承String
}
可理解为final修饰的变量成为了一种“常量”,这种常量本身不可被修改;
int i = 100;
System.out.println(i);
i = 200;
System.out.println(i);
final double pai = 3.1415926;
System.out.println(pai);
//pai = 3.14;编译错误
针对类体中成员变量之实例变量:
public class FinalTest02 {
//成员变量之实例变量
//实例变量有默认值 + final修饰的变量一旦赋值不能重新赋值
//综合考虑,Java语言最终规定实例变量使用final修饰hou,必须手动赋值,不能采用系统默认值
//final int age;编译错误
}
}
成员变量之实例变量
实例变量有默认值 + final修饰的变量一旦赋值不能重新赋值
综合考虑,Java语言最终规定实例变量使用final修饰hou,必须手动赋值,不能采用系统默认值
解决方案:
//第一种解决方法
final int age = 10;
//第二种解决方法
final int num;
public FinalTest02() {
this.num = 200;
}
以上两种解决方案其实本质上都一样,都是手动赋值
final修饰的引用:
//创建对象
User u = new User(100); //User u = 0x1234;
//又创建了一个新的User对象
//程序执行到此处表示以上对象已变成垃圾数据,等待垃圾回收器的回收。
u = new User(200); //u = 0x5678;
//创建对象
final User user = new User(30);
//user = new User(50); 编译错误
//final修饰的对象,一旦指向某个对象了,不能指向其它的对象,那么被指向的对象无法被垃圾回收器回收。
【注】:final修饰的引用虽然指向某个对象之后不能在指向其他对象,但所指对象的内容是可以别修改的
以下程序合法:
user.id = 50;
//final修饰的引用虽然指向某个对象之后不能在指向其他对象,但所指对象的内容是可以别修改的
final常量:
final修饰的实例变量是不可变的,这周变量一般和static联合使用,被称为“常量”
常量定义的语法格式:
public static final 类型 常量名 = 值;
Java规范中要求所有常量的名字全部大写,每个单词之前使用下划线链接。
class Math{
public static final double PI = 3.1415926;
}
class Chinese {
//国籍 (防止国籍被修改)
public static final String GUO_JI = "中国";
}