Java讲课笔记14:final关键字

零、本讲学习目标

1、掌握final 关键字修饰类

2、掌握final 关键字修饰方法

3、掌握final 关键字修饰变量

一、final关键字概述

final关键字可用于修饰类、变量和方法,它有“不可更改”或者“最终”的含义。因此被final修饰的类、变量和方法将具有以下特性。

  • final修饰的类不能被继承
  • final修饰的方法不能被子类重写
  • final修饰的变量(成员变量和局部变量)是常量,只能赋值一次

二、final关键字修饰类

1、final修饰类的作用

Java中的类被final关键字修饰后,该类将不可以被继承,也就是说不能够派生子类,因此我们将final关键字修饰的类叫做“最终类”。在实际开发中,如果我们希望某个类不能被继承,我们就用final关键字来修饰这个类。

2、案例演示final修饰类

  • 创建Example1401.java
    在这里插入图片描述
package net.hw.lesson14;

/**
 * 功能:演示final修饰类
 * 作者:华卫
 * 日期:2020年05月08日
 */

// 使用final关键字修饰Animal类
final class Animal {

}

// 继承Animal类创建Dog类
class Dog extends Animal {

}

public class Example1401 {
    public static void main(String[] args) {
        Dog dog = new Dog();
    }
}
  • 程序编译报错
    在这里插入图片描述
    当Dog类继承一个被final关键字修饰的Animal类之后,在编辑器里,Animal类下出现红色波浪线,鼠标移到Animal类上,会弹出一个错误提示小窗口“Cannot inherit from final 'net.hw.lesson14.Animal(无法继承最终类net.hw.lesson14.Animal)”。由此可见,被final关键字修饰的类为最终类,不能被其它类继承。

三、final关键字修饰方法

1、final修饰方法的作用

当一个类的某个方法用关键字final来修饰之后,该类的子类将无法重写该方法,因此final关键字修饰的方法也叫“最终方法”。在实际开发中,如果希望父类的某个方法不能被子类重写,那么我们就用final关键字来修饰该方法。

2、案例演示final修饰方法

  • 创建Example1402.java
    在这里插入图片描述
package net.hw.lesson14;

/**
 * 功能:演示final修饰方法
 * 作者:华卫
 * 日期:2020年05月08日
 */
// 定义Person类
class Person {
    // 用final关键字修饰walk()方法
    public final void walk() {
        System.out.println("人在行走……");
    }
}

// 继承Person类创建Man类
class Man extends Person {
    @Override
    public void walk() {
        System.out.println("男人在行走……");
    }
}

public class Example1402 {
    public static void main(String[] args) {
        Man man = new Man();
        man.walk();
    }
}
  • 程序编译报错
    在这里插入图片描述
    当子类Man重写父类Person的walk()方法时候,编辑器里,子类的walk()方法头下出现红色波浪线,将鼠标移到上面,弹出一个小窗口显示错误提示信息“‘walk()’ cannot override ‘walk()’ in ‘net.hw.lesson14.Person’; overridden method is final(walk()方法不能重写net.hw.lesson14.Person类的walk()方法)”。由此可见,被final关键字修饰的方法为最终方法,子类不能重写该方法。

四、final关键字修饰变量

1、final修饰变量的作用

Java中被final修饰的变量被称为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值就不能被修改。如果再次对该变量进行赋值,则程序会在编译时报错。

2、案例演示final修饰变量

(1)final修饰局部变量

  • 创建Example1403
    在这里插入图片描述
package net.hw.lesson14;

/**
 * 功能:演示final修饰局部变量
 * 作者:华卫
 * 日期:2020年05月08日
 */

public class Example1403 {
    public static void main(String[] args) {
        // 声明静态局部变量
        final int age;
        // 给静态局部变量第一次赋值
        age = 18;
        // 给静态局部变量第二次赋值
        age = 20;
    }
}
  • 给静态局部变量第二次赋值时,程序编译报错
    在这里插入图片描述
    系统提示“变量age也许已经被赋值了”,由此可见,被final修饰的变量为常量,它只能被赋值一次,其值不可改变。
  • 声明静态局部变量的同时给它赋初值
    在这里插入图片描述

(2)final修饰成员变量

  • 创建Example1404
    在这里插入图片描述
package net.hw.lesson14;

/**
 * 功能:演示final修饰成员变量
 * 作者:华卫
 * 日期:2020年05月08日
 */
public class Example1404 {
    // final修饰成员变量,并赋初值
    static final int age = 18;

    public static void main(String[] args) {
        System.out.println("age = " + age);
    }
}
  • 运行程序,查看结果
    在这里插入图片描述
  • 再次对静态成员变量赋值,程序编译报错
    在这里插入图片描述
    系统提示:Cannot assign a value to final variable ‘age’(不能给最终变量“age”赋值)
  • 静态成员变量跟静态局部变量不同,不能先声明后赋值
    在这里插入图片描述
    系统提示:Variable ‘age’ might not have been initialized(变量age也许未被初始化)

五、课后作业

1、类的final变量和普通变量有什么区别?

在这里插入图片描述
同学们输入上述程序并运行,看看输出的结果,并解释为什么。

2、被final修饰的引用变量指向的对象内容可变吗?

在这里插入图片描述
同学们输入上述程序并运行,看看输出的结果,并解释为什么。
在这里插入图片描述
再次对静态局部变量test赋值,程序编译就会报错。

3、final和static有什么区别?

在这里插入图片描述
同学们输入上述程序并运行,看看输出的结果,并解释为什么。

猜你喜欢

转载自blog.csdn.net/howard2005/article/details/105999118
今日推荐