目录
一、final概述
final是个修饰符。
final是最终的,不可修改的意思。
final可以修饰类,方法,成员变量,局部变量,方法形参
二、final修饰变量
此时的变量转为常量。
此变量在第一次被赋值后,再不能修改它的值。
public class Test{
private final int age=10; // 必须赋值
public void method(){
age = 100; // 编译报错,不能重新赋值
}
}
成员常量一般也做成static类型,因为没有必要为每个实例提供一份根本不会变化的变量空间
常量的定义规则
public static final double PI=3.14;
1:public :访问权限最大
2:static :内存中只有一份
3:final :是一个常量
4:常量名大写,多个单词用下划线(_)分隔
5:必须初赋值,赋值后,不能重新赋值。
案例:
定义静态方法求圆的面积
定义静态方法求圆的周长
发现方法中有重复的代码,就是PI,圆周率。如果需要提高计算精度,就需要修改每个方法中圆周率。
public static final double PI = 3.14; // 静态常量
public static double getArea(double r) {
return PI * r * r;
}
public static double getLength(double r) {
return PI * r * 2;
}
三、final修饰方法
该方法是最终方法,不能被子类重写。
class A{
public final void sayHello(){
System.out.println("你好");
}
}
class B extends A{
public void sayHello(){ // 编译报错——不能重写父类中被final修饰的方
}
}
四、final修饰类
该类是最终类,不能被继承。
final class AA{
}
class BB extends AA{ // 编译报错——被final修饰的类,不能被继承 jdk中的String类就是不能被继承的
}
五、final修饰局部变量
final修饰的局部变量不能重新赋值。
class X{ // final修饰局部变量
public void hello(){
final int x = 100;
x = 200; //final修饰的局部变量,不能重新赋值
}
}
六、final修饰形参
1: 当形参被修饰为final,那么该形参所属的方法中不能被篡改(重新赋值)。
2: 项目中主要用于一些只用来遍历未知数据的方法。将未知变量声明为final的。增强数据的安全性。
public class TestFinal {
/*
* 用final修饰方法的形参
* */
public static void printStudentName(final Student s){
//s.setName("yyy"); // 这句不是为形参重新赋值
//s = new Student(2,"李四"); // 因为final修饰了形参,所以不能重新赋值
System.out.println(s.getName());
}
public static void add(final int x, final int y){
/* 因为final修饰了 形参,所以在方法中不能为 形参重新赋值
x = 10;
y = 10;
*/
System.out.println(x+y);
}
public static void main(String[] args) {
Student s = new Student(1,"xxx");
printStudentName(s);
add(100, 100);
}
}
下一篇:(29)包和访问权限