1.用final修饰的成员变量表示常量,只能被赋值一次,赋值后值无法改变!

final修饰的变量有三种:

  • 实例变量
我们都知道,成员变量没有赋值的话会系统会给默认值,然而加了final之后不管用了,依旧要手动赋值才可以编译通过。

java修改final变量的值 javafinal修饰变量_赋值

  • 局部变量

分别表示三种类型的常量。 从下面的例子中可以看出,一旦给final变量初值后,值就不能再改变了。 另外,final变量定义的时候,可以先声明,而不给初值,这种变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。

  • 静态变量
    static final同时连用(可以简单的理解为全局常量)
    写法:static final 数据类型 常量名 = 值; static final和final static没什么区别,一般static写在前面。

我们学C++,静态变量有静态成员变量、静态局部、静态全局三种说法,然而java里,只有静态成员变量,static不能修饰局部变量,也没有全局变量的说法,因为一切语句包括定义语句都只能写在类或者接口里面。

这种写法是可以的,但是要注意的是!这个写法只能写在类的定义语句块中,只有类的属性允许被定义为这种写法,方法体中的这种写法是不被允许的。而且,必须在定义变量时初始化。

规则1:必须定义时赋值:

java修改final变量的值 javafinal修饰变量_java修改final变量的值_02

规则2:final static不能修饰局部变量。

java修改final变量的值 javafinal修饰变量_句柄_03

我们上面用String类型作为例子,实际上在java里头不叫变量,叫引用。final修饰引用比较特殊,只是表示不可以改变其指向,但我们仍旧可以修改其成员的值,即如果String有个成员变量叫name,我们是可以对其进行修改的。

2.用来修饰一个方法

当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。

3.用来修饰类

当用final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。

比如常用的String类就是最终类。

总结

final可以修饰:属性,方法,类,局部变量(方法中的变量)

final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。

 final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。

 final修饰的属性表明是一个常数(创建后不能被修改)。

 final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继承。

 对于基本类型数据,final会将值变为一个常数(创建后不能被修改);但是对于对象句柄(亦可称作引用或者指针),final会将句柄变为一个常数(进行声明时,必须将句柄初始化到一个具体的对象。而且不能再将句柄指向另一个对象。但是,对象的本身是可以修改的。这一限制也适用于数组,数组也属于对象,数组本身也是可以修改的。方法参数中的final句柄,意味着在该方法内部,我们不能改变参数句柄指向的实际东西,也就是说在方法内部不能给形参句柄再另外赋值)。