首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。