JAVAfinal修饰词

final修饰词

final的含义:final修饰符代表的含义就是最终的,最后的,不可更改的意思

  1. final修饰的变量不能更改,final修饰的变量有三种;
    局部变量
    实例变量
    静态变量

  2. final修饰的方法不能被重写(final不能用于修饰构造方法);
    把方法锁定,防止任何继承类修改它的意义和实现。
    高效,编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

  3. final修饰的类不能被继承;
    String、Mat、Syste等类都是设计成final的类
    因此final类的成员方法没有机会被覆盖,默认都是final的。
    在设计类的时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这类不会被扩展,那么设计为final类。

  4. final如果修饰的引用,那么这个引用只能指向一个对象,也就是说这个引用不能再次赋值,
    但被指向的对象是可以修改的

public class FinalTest01 {
	public static void main(String[] args) {
	
	}
}

final class A1 {
	public void test1() {
	
	}
}

//不能继承 A1,因为 A1 采用 final 修饰了
class B1 extends A1 {
	public void test2() {
	
	}
}

在这里插入图片描述

采用 final 修饰的方法不能被覆盖

public class FinalTest02 {
	public static void main(String[] args) {
	}
}
class A1 {
	public final void test1() {
	
	}
}
class B1 extends A1 {
//覆盖父类的方法,改变其行为
//因为父类的方法是 final 修饰的,所以不能覆盖
	public void test1() {
	}
	public void test2() {
	}
 }

在这里插入图片描述

采用 final 修饰的变量(基本类型)不能被修改

public class FinalTest03 {
	private static final long CARD_NO = 878778878787878L;
	public static void main(String[] args) {
	//不能进行修改,因为 CARD_NO 采用 final 修饰了
	CARD_NO = 99999999999999L;
	} 
}

在这里插入图片描述

final 修饰的变量必须显示初始化

public class FinalTest04 {
//如果是 final 修饰的变量必须初始化
private static final long CARD_NO = 0L;
	public static void main(String[] args) {
	int i;
	//局部变量必须初始化
	//如果不使用可以不初始化
	System.out.println(i);
	}
}

如果修饰的引用,那么这个引用只能指向一个对象,也就是说这个引用不能再次赋值,但被指向的对象是可以修改的

public class FinalTest05 {
	public static void main(String[] args) {
	Person p1 = new Person();
	//可以赋值
	p1.name = "张三"; 
	System.out.println(p1.name);
	final Person p2 = new Person();
	p2.name = "李四";
	System.out.println(p2.name);
	//不能编译通过
	//p2 采用 final 修饰,主要限制了 p2 指向堆区中的地址不能修改(也就是
	p2 只能指向一个对象)
	//p2 指向的对象的属性是可以修改的
	p2 = new Person();
	} 
}
class Person {
String name;
}
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页