10.3. final关键字¶
10.3.1. final修饰变量¶
inal修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和成员变量有所不同。 01. final修饰的局部变量必须使用之前被赋值一次才能使用。 02. final修饰的成员变量在声明时没有赋值的叫“空白final变量”。空白final变量必须在构造方法或静态代码块中初始化。
代码示例
package final_Class_Var;
public class FinalDemo {
void doSomething() {
// 没有在声明的同时赋值
final int e;
// 只能赋值一次
e = 100;
System.out.println(e);
// 声明的同时赋值
final int f = 200;
System.out.println(f);
}
// 实例常量
final int a = 5; // 直接赋值
final int b; // 空白final变量
// 静态常量
final static int c = 12;// 直接赋值
final static int d; // 空白final变量 f
// 静态代码块
static {
// 初始化静态变量
d = 32;
}
// 构造方法
FinalDemo() {
// 初始化实例变量
b = 3;
// 第二次赋值,会发生编译错误
// b = 4;
}
public static void main(String[] args) {
FinalDemo final_Var = new FinalDemo();
System.out.println(final_Var.a);
System.out.println(final_Var.b);
System.out.println(final_Var.c);
System.out.println(final_Var.d);
// 静态方法可以通过类名进行调用
System.out.println(FinalDemo.d);
final_Var.doSomething();
}
}
/*
5
3
12
32
32
100
200
* /
*/
10.3.2. final修饰类¶
final修饰的类不能被继承。有时出于设计安全的目的,不想让自己编写的类被别人继承,这时可以使用final关键字修饰父类。
代码示例
package com.a53work.cn;
final class hujianli_Class{
int x = 100;
public int getX() {
return x;
}
}
public class Test_Final extends hujianli_Class { //编译报错,final标记的父类无法被子类继承
// public static void main(String[] args) {
// hujianli_Class n1 = new hujianli_Class();
// System.out.println(n1.x);
// System.out.println("获取x的值为:"+ n1.getX());
}
}
10.3.3. final修饰方法¶
final修饰的方法不能被子类覆盖。有时也是出于设计安全的目的,父类中的方法不想被别人覆盖,这是可以使用final关键字修饰父类中方法。