java-final关键字

1、final修饰类、变量和方法的区别

 -  修饰类:类不能被继承。

 -  修饰变量:变量就成了常量,只能被赋值一次。

    *  常量命名规范:如果是一个单词,所有字母大写;如果是多个单词,每个单词都大写,中间用下划线隔开。

    *  final修饰变量叫做常量,一般会与public static共用。

 -  修饰方法:方法不能被子类重写。

2、final修饰变量的初始化时机

 -  方法一:显示初始化

 -  方法二:在对象构造完毕前即可(通过构造函数进行初始化)

 -  以上两种方法不能同时都用,会报错。因为被final修饰的变量只能被赋值一次。

1 class Demo {
2     //final int num=10;  //这是第一种初始化的方法,显示初始化
3     final int num;
4 
5     public Demo(){
6         num=10;  //这是第二种初始化的方法,通过构造函数完成初始化
7     }
8 }

3、final修饰基本类型和引用类型的区别

 -  final修饰基本类型:是值不能被改变。

    *  注意在方法声明上使用final修饰参数时,参数中被final修饰的变量可以在方法调用时重新赋值。

    *  其实这是因为,上一次调用的方法执行完就被弹栈了,所以每次调用方法传入参数的时候,都相当于是一个“新”的方法入栈。因此能够不报错,而且还能改变变量的值。

1 public void method(final int x){
2     System.out.println(x);
3 }
4 
5 method(10);  //合法
6 method(20);  //合法

 -  final修饰引用类型:是地址值不能被改变,对象中的属性可以改变。

1 class Person {
2     ...
3 }
4 
5 final Person p=new Person("张三",23);
6 //p=new Person("李四",24);  //这么写报错,因为被final修饰的对象所指向的地址值不能改变
7 p.setName("李四");  //可以改变对象中的属性值
8 p.setAge(24);  //可以改变对象中的属性值
原文地址:https://www.cnblogs.com/hfumin/p/10134799.html