final关键字
final修饰的类无法继承;
final修饰的方法无法被覆盖和重写;
final修饰的局部变量,一旦赋值无法重新赋值。(当final声明时没有赋值,可以赋值,但是再不允许赋值了)**只能赋一次值
final修饰的引用:
该引用只能指向一个对象,并且它只能永远指向该对象,无法再指向其他对象。但是其内部的数据是可以被修改的。
public class Final{ public static void main(String[] args){ final User user = new User(); user.weight = 3.0; System.out.println(user.weight); } } class User{ double height = 1.0; double weight = 2.0; public User(){ //this.weight = weight; } public User(double b){ this.weight = b; } }
在该方法的执行过程中,该引用指向对象之后,该对象不会被垃圾回收器回收,直到当前方法结束,才会释放空间。
实例变量既然使用了final修饰了,说明该实例变量值不会随着对象的变化而变化。
final修饰实例变量,系统不会赋默认值,必须手动赋值。
手动赋值:在变量后面赋值可以,在构造方法中赋值也可以。。
**********注意:::实例变量既然使用了final修饰了,说明该实例变量的值不会随着对象的变化而变化。
该实例变量前面应该加static关键字,变为静态的,存储在方法区。
*********开发规范:static final联合修饰的变量称为“常量”。
常量名建议全部大写,每个单词之间采用下划线衔接。
常量和静态变量的区别:
常量的值不能变。
常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。
常量一般都是公开的。
public class Final{
public static void main(String[] args){ } } class User{ final double height = 1.0; final double weight; public User(){ this.weight = 2.0; } public User(double b){ this.weight = b; } }