关于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 = "中国";
	
}