final 关键字是最终的意思,可以修饰(类、方法、变量)
// 1. final修饰类:类不能被继承了
// 一般情况很少用,但在写工具类时可能会用得比较多,因为工具类只想给你使用工具,不想被你继承
final class A {
}
//class B extends A{} // 报错
// 2. final修饰方法:方法不能被重写了
class C {
public final void test() {
}
}
public class HelloWorld {
/**
* 常量:public static final 修饰的成员变量,建议名称全部大写,多个单词下划线连接
*/
public static final String THIS_NAME = "常量"; // 3. final修饰变量:有且仅能赋值一次
public final String name = "毫无意义"; // 这种用法没有意义,同一个内容,随着对象的增加占用多份内存,又无法修改
public static void main(String[] args) {
// 3. final修饰变量:有且仅能赋值一次
final double pi = 3.1415926;
final int a;
a = 10; // 第一次赋值
// a = 99; // 第二次赋值,报错
}
// 3. final修饰变量:有且仅能赋值一次
public static void buy(final int y) {
// y = 10; // 在形参中加final,意味着形参不能修改了,所以这里想将y改成10,会报错!
}
}
使用了 static final 修饰的成员变量,就被称为常量;其作用,通常是用于记录系统的配置信息
// 源代码
public class HelloWorld {
public static final String THIS_NAME = "小番茄"; // 常量
public static void main(String[] args) {
System.out.println(THIS_NAME);
System.out.println(THIS_NAME);
System.out.println(THIS_NAME);
}
}
// 下面是源代码编译后,经过反编译,得到的代码
// 你会发现,常量出现的地方全部会被替换成其记住的字面量了,也就是全部被替换为"小番茄"了
public class HelloWorld {
public static final String THIS_NAME = "小番茄";
public HelloWorld() {
}
public static void main(String[] args) {
System.out.println("小番茄");
System.out.println("小番茄");
System.out.println("小番茄");
}
}