首页 > 代码库 > java回顾之final

java回顾之final

final关键词
用于表示它修饰的类,方法,变量不可改变
修饰变量时,一旦其获得了初始值,就不可改变,它既可以修饰成员变量,也可以修饰局部标量,形参等
final修饰的成员变量必须现实的指定初始值,系统不会饮食的对其进行隐式初始化

例如 

public class FinalVariableTest {   public void test(final int a)   {	   //a=5;//错误,应该由系统传入的参数进行初始化,所以这里不能被赋值   }	public static void main(String[] args)	{		final String str="zx";//定义局部变量默认值,则不能再被赋值		//str="12";//错误,不能再被赋值				final int a;//没有指定默认值,可以被赋值一次		a=5;				//a=4;//再次被赋值,错误			}}

  

final修饰的基本类型变量和引用类型变量区别
对于引用类型变量来说,他保存的仅仅是一个引用,final只保证所引用的地址没变,即引用的是同一个对象
但是对象时可以随意改变的
例如

class PersonClass {	private int age;	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public PersonClass(){}	public PersonClass(int age)	{		this.age=age;	}}  class Go {	 public static void main(String[] args)	 {		 final PersonClass pClass=new PersonClass(45);		// pClass=null;//引用的不再是原来的对象了,所以出错		 	 } }

  

final方法表示不希望子类重写父类的某个方法
比如

class BaseClass {	 public final void get()	 {		 	 }	 private final void set()	 {		 	 } } class SonClass extends BaseClass {	 //public void get();//会出错,不能重写final方法	 public void set()	 {		 	 }//因为private子类无法访问,就相当于创建了一个新方法	 }

  具体还有不可变类,出现的场合,比如你项目初始化一些不可变的参数,例如你使用一个map保存了项目中所有的配置文件的键值对,这些键值对是永不变的,为了防止客户的改变,你可能就需要使用不可变类,每个返回给用户一个保护性的拷贝。

只要不是固定的,永不改变的东西,对于类的设计都不需要不可变类,不可变的类的实现也是需要消耗一定的内存和性能的,可以通过缓存不可变类来实现减少开销,具体实现方法,待写

java回顾之final