要点
关于java语言当中final关键字:
1、final是一个关键字,表示最终的,不可变的。
2、final修饰的类无法被继承
3、final修饰的方法无法被覆盖
4、final修饰的变量"—旦"赋值之后,不可重新赋值【不可二次赋值】
5、final修饰的实例变量,必须手动赋值,不能采用系统默认值
6、final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收。
final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的。
7、final修饰的实例变量,一般和static联合使用,被称为常量。
示例
示例一
public class FinalTest01{
public static void main(String[] args){
int i = 10;
System.out.println(i);
i=20;
System.out.println (i);
final int k=100;
//编译错误:无法为最终变量k分配值
//k = 200;
final int m;
m=200;
//编译错误:无法为最终变量n分配值
//m = 300;
}
}
示例二
public class FinalTest02 {
//成员变量之实例变量
//实例变量有默认值+final修饰的变量一旦赋值不能重新赋值
//综合考虑,java语言最终规定实例变量使用final修饰之后,必须手动赋值,不能采用系统墅认值。
//final int age; //编译错误
//第一种解决方案
final int age = 10;
//第二种解决方案
final int num;
public FinalTest02(){
this.nun=200;
}
//以上的两种解决方案:其实本质上就是一种方式,都是在构造方法执行过程当中给实例变量赋值。
public static void main (String[] args) {
final int a;
a = 100;
//不可二次赋值
//a = 200;
}
}
示例三
public class FinalTest03 {
public static void main (String[] args) {
//创建用户对象
User u = new User(100); // User u=0x1234;
//又创建了一个新的User对象
//程序执行到此处表示以上对象已变成垃圾数据,等待垃圾回收器的回收。
u=new User(200); //u = 0×2586;
//创建用户对象
final User user=new User(30);
//user = new User(50);//final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收。
user.id = 50;//final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的。
/*
final int i=10;
i=20;
*/
}
}
示例四
public class FinalTesto4 {
public static void nain (string[] args){
System.out.println(Chinese.GUO_JI);
Systen.out.println( "圆周率:" + Math.PI);
}
}
class Math {
public static final double PI = 3.1415926;
}
//中国人
class Chinese{
//国籍
//需求:每一个中国人的国籍都是中国,而且国籍不会发生改变,为了防止国籍被修改,建议加final修饰。
//final修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为"常量”
//常量的定义语法格式:
//public static final类型常量名=值;
//java规范中要求所有常量的名字全部大写,每个单词之问使用下划线连接
//static final String country ="中国";
public static final String GUO_JI = "中国";
}