final关键字

  • final基础
  • final修饰的类
  • final修饰的方法
  • final修饰的变量
  • final修饰的引用
  • final修饰的实例变量


final基础

1、final是java语言中的一个关键字。
2、final表示最终的,不可变的。
3、final可以修饰变量、方法和类等

final修饰的类

final修饰的类不能被继承。

final class A{	
}
class B extends A{
//编译报错
//被final修饰的类不准被继承
}

final修饰的方法

final修饰的方法不能被重写。

class A{
	public final void doSome(){
		System.out.println("A doSome..");
	}
}
class B extends A{
	public void doSome(){
		System.out.println("B doSome..");
	}
//编译报错
//被final修饰的方法不能被重写
}

final修饰的变量

final修饰的变量只能赋一次值。

public class Test{
	public static void main(String[] args)
	{
		//局部变量
		int i =100;
		//重新赋值
		i==200;
		//局部变量
		final int k =100;
		//重复赋值
		k = 200;
		//错误:无法为最终变量赋值
	}
}
public class Test{
	public static void main(String[] args)
	{
		final int m;
		m = 100;//第一次赋值可以
		m = 300;//第二次赋值不可以编译报错
	}
}

final修饰的引用

final修饰的引用:
该引用只能指向一个对象,并且它只能永远指向该对象,无法再指向其他对象。

class Person{
	int age;
	public Person(){
	}
	public Person(int age){
		this.age = age;
	}
}
public class Test{
	public static void main(String[] args)
	{
		Person p1 = new Person(20);
		System.out.println(p1.age);
		final Person p = new Person(30);
		p = new Person(30);
		//其实如上final修饰一样
		//被final修饰的变量只能赋值一次
		//p也是一个变量
		//只不过它也是一个引用
		//并且在该方法执行过程中
		//该引用指向对象之后
		//该对象不会被立即回收器回收
		//直到当前方法结束,才会释放
	}
}

java中finally语句 java语言final_多态

final修饰的实例变量

局部对象是没有初始值,成员变量有初始值。

实例变量如果没有手动赋值的话,系统会赋默认值。
class User{
	//实例变量
	final int age;
	//实例变量如果有final关键字
	//要求程序员手动赋值
	//不然报错
}

结论:final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值。

实例变量什么时候赋值(初始化)
构造方法执行的过程中赋值(new的时候赋值)
class User{
	//实例变量
	final int age;
	public User(){
		this.age = 10;
	//构造方法中赋值
	//这样是允许的
	//只要赶在系统赋默认值之前赋值就行
	}
}
final修饰的实例变量一般添加static修饰
class Chinese{
	Strting idCard;
	String name;
	stataic final String COUNTRY = "中国";
	//既然country永远都是固定值
	//说明实例变量值不会随着对象的改变而改变
	//该实例变量前应该添加:static关键字,变为静态的存储在方法区
	//country不会随着对象的值而改变
	//最好是静态的,介绍内存
}
结论:
static final 联合修饰的变量称为“常量”
常量名建议全部大写,每个单词之间采用下划线衔接。
常量:实际上常量和静态变量一样,区别在于:常量的值不变。
常量和静态变量都存储在方法区,并且都是在类加载时初始化。