final可以修饰变量,方法还有类。

final修饰变量又分普通变量,比如说int,double等等类型的;还有就是数组,字符串,class类型的;

1.final修饰普通变量时,在被第一次赋值后值就再也不可以改变,例如final int a=1,则接下来若改变a的值就会报错(a=2,报错),但是当final int a没有被初始化的话,第一次赋值a=2不会报错,之后再改变会。

2.final在修饰特殊变量,比如说数组时,final array[] a=new array[]{1,2,3},指的是a指向这个new的地址值,且a指向永远不能改变。但是a指向的地址的值可以改变。

3.final在修饰方法时,一般是用在类里面的方法,是为了防止继承类(子类)改变该方法。子类不能覆盖该方法。

4.final在修饰类时,则表示该类不能被继承,则无子类。

final与static的区别:

        static是静态变量,(全局的)定义了第一次之后,下一次就不用再定义(例如某类构造函数中有static int a=3,则第一次建立该类对象后,再一次建立新对象则不会再定义了static int a=3这个语句了)。要调用该变量,需要类名.变量名才行,因为它是属于一个类的,不单独属于某个对象。

        final是表示被修饰的变量值一旦被赋值就不能改变(只针对普通变量,特殊变量上面有,自己去看)

当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。(这段不懂的话,具体去看浅析Java中的final关键字 )深入了解第一个。

思考:在类的方法中给形参修饰final好像不能达到c++中直接给函数修饰const的效果,所以怎么才能达到函数只读取数据而不能改变数据