目录

一、final概述

二、final修饰变量

三、final修饰方法

四、final修饰类

五、final修饰局部变量

六、final修饰形参


一、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);
	}
}