Final
final关键字的用法:
1. final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的。
2. fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象。
3. final关键字修饰一个函数的时候,该函数不能被重写。
4. final关键字修饰一个类的时候,该类不能被继承。
正如以上描述所讲,用途就是为四个,基本变量,引用变量,函数,类,
但是理论归理论,看几个例子
1
final int i =1;
i=2; //这个如果再要修改java编译器会报错的
2
3
如果没有final就可以继承
对比两幅图片发现,当我们一个父类的方法添加final以后,子类便无法继承。
4
通过这里发现验证我们的理论是正确的。
其实更多的时候并不是在这几种情况使用final,有一种情况是当我们在一个函数的参数中使用final,
例如。
public void showUpgradeDialog(final UpdateBean bean) {}
public void showUpgradeDialog(final int bean) {}
这里需要分两种情况,如果为基本类型,自然是不能修改bean的,也符合上面我们总结的,但是
如果是引用类型的呢?
仔细想想,java中传参类型,无非就两种,1 引用类型 2 值传递,其实本质都是值传递,不过引用是复制的
内存地址,那么bean的对象是不能修改,但是对象里面的属性值还是可以修改的,好比女的有个老公,老公是固定的,老公的职业是可以变化的。
那我们为什么要用final呢?个人理解为函数是入参,防止参数被修改,算是java语法的一个预防程序员的错误。
java又不像c语言,传入参数的改变会更改调用方法的内存。
总结,参数的final仅仅只是为了防止参数再函数内被更改。