关于java语言当中final关键字:
1.final是一个关键字,表示最终的,不可变的
2.final修饰的类无法被继承
3.final修饰的变量一旦被赋值之后,不可重新赋值
4.final修饰的实例变量必须手动赋值,不能采用默认赋值
5.final修饰的引用final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收,final修饰的引用虽然指向某个对象之后不能再指向其它对象,但是所指向的对象内部的内存可以被修改的
6.fianl修饰的变量是不可变的,这种变量一般和static联合使用,被称为“常量”
常量的语法格式:
public static fianl 类型 常量名 = 值;
java规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接
示例代码:
final class A { } class B //extends A { } class C { public final void eat(){ } class D extends C{ /* public final void eat() }*/ } public class FinalTest01 { public static void main(String[] args) { //把字符串中的a替换成x String newString = "asbhfdhafhhaajhfa".replaceAll("a", "x"); System.out.println(newString); int a = 50; System.out.println(a); a = 60; System.out.println(a); final int k = 10; //k = 20; //编译错误:无法为最终k分配值 final int m; m = 200; //m = 300; //编译错误:无法为最终变量m分配值 } } class FinalTest02 { //成员变量之实例变量 //实例变量有默认值 + final修饰的变量一旦赋值不能重新赋值 //综合考虑,java语言最终规定使用final修饰之后,必须手动赋值,不能采用系统默认值 //final int i;编译错误 //第一种解决方案 final int i = 10; //第二种解决方案 final int num; public FinalTest02(){ this.num = 15; } //以上的两种解决方案:其实本质上就是一种方式,都是在构造方法执行过程当中给实例变量赋值 public static void main(String[] args) { } } class FinalTest03 { public static void main(String[] args) { //创建用户对象 User u = new User(100); //又创建了一个新的User对象 //程序执行到此处表示以上对象已变成垃圾数据,等待垃圾回收器的回收 u = new User(200); //创建另一个用户对象 final User user = new User(300); //user = new User(400);//final修饰的引用,一旦指向某个对象之后,不能再指向其它对象, //那么被指向的对象无法被垃圾回收器回收 //final修饰的引用虽然指向某个对象之后不能再指向其它对象,但是所指向的对象内部的内存可以被修改的 System.out.println(user.id); user.id = 100; System.out.println(user.id); } } class User { int id; public User(){ } public User(int id){ super(); this.id = id; } public int getId() { return id; } public void setId(int id) { this.id = id; } } class FinalTest04 { public static void main(String[] args) { System.out.println(Chinese.Guoji); System.out.println(Math.PI); } } class Math{ public static final double PI = 3.1415926; } //中国人 class Chinese{ //国籍 //fianl修饰的变量是不可变的,这种变量一般和static联合使用,被称为“常量” //常量的语法格式: // public static fianl 类型 常量名 = 值; //java规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接 public static final String Guoji = "中国"; }