JAVA final修饰符

final修饰符可以修饰类、所有变量、方法。

当final修饰成员变量(类变量或实例变量)时:
普通成员变量系统默认赋值,但由final修饰时,必须由程序员指定初始值,因为final修饰的变量只能被赋值一次,成为常量。
如果是实例变量,只能在以下三个地方指定初始值:
1.声明时。
2.非static初始化块。
3.构造器。
如果是类变量,只能在以下两个地方指定初始值:
1.声明时。
2.static初始化块。

当final修饰局部变量(方法中、代码块中或形参)时:
final局部变量依然要程序员手动初始化,一旦初始化后就不能变了。
final修饰的变量如果声明时指定了初始值并且编译时就能确定,则会进行宏替换,即编译后的代码中的final修饰的变量名全变为了具体值,而声明语句就相当于不存在,如:

final String a = "a";
final String b = "b";
final String c = "c";
final String d = a + b + c;
System.out.println(d);

以上代码中有1个对象,0个变量。编译后与以下代码编译后效果相同:

System.out.println("abc");

final方法:
被final修饰的方法不能被重写。
需注意,final与private配合使用无意义,因为子类中出现的重写的private方法不算重写。

final类:
final修饰的类不能有子类。如String、System、Math、基本类型的包装类等。

posted @ 2019-03-11 00:13  epiphanyy  阅读(15)  评论(0)    收藏  举报  来源