从面试的角度重新学习java final 关键字

27 篇文章 0 订阅
13 篇文章 0 订阅

在这里插入图片描述

1 final 关键字的用法是什么?

  • final关键字可以用于修饰类、类属性和类方法。
    – 对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错:
    – final 修饰的类方法不能被覆盖(重写)
    – final 修饰的类不能被子类继承。

2 什么是空白final变量

空白final 变量在声明期间不会初始化。

3 可以在不初始化的情况下声明最终变量吗?

可以,可以在不初始化的情况下声明最终变量,这些最终变量称为空白最终变量,但必须在使用前进行初始化。

初始化块

实例初始化块用于初始化实例数据成员,每次创建类的对象时,该块都会运行。 实例初始化块恰好在构造函数中的代码之前执行。 我们可以使用IIB初始化实例最终变量

package TestFinalKeyWord;

/**
 * @author
 * @create 2020-12-17 11:09
 **/
public class Test {
    // Blank final variable
    final int SPEED;
    // Instance Initialization Block
    {
        SPEED = 5;
    }
    public static void main(String args[])
    {
        Test t=new Test();
        System.out.println("Travelling Speed is :"+t.SPEED);
    }
}

static 静态初始化块

静态块是Java类内部的代码块,将在类首次加载到JVM中时执行。 静态初始化块可用于初始化类最终变量/静态最终变量

package TestFinalKeyWord;

/**
 * @author
 * @create 2020-12-17 11:09
 **/
public class Test {
    // Blank final variable
    static final int SPEED;

    // Static Initialization Block
    static
    {
        SPEED = 10;
    }

    public static void main(String args[])
    {
        System.out.println("Travelling Speed is :" + SPEED);
    }
}

在这里插入图片描述

通过构造器

构造函数还可用于初始化空白的最终变量。

public class Test
{
    // Blank final variable
    final int SPEED;

    // No Parameter Constructor
    Test()
    {
        SPEED = 15;
    }

    public static void main(String args[])
    {
        Test t=new Test();
        System.out.println("Travelling Speed is :"+t.SPEED);
    }
}

在这里插入图片描述

4.方法内

局部最终变量可以在声明期间或声明之后的任何地方初始化。 使用前必须先初始化。

public class Test
{
    public static void main(String args[])
    {
        // Local final variable
        final int SPEED;

        SPEED = 25;

        System.out.println("Travelling Speed is :" + SPEED);
    }
}

4 什么是final 方法

当一个方法被声明为final方法时,它被称为final方法。子类可以调用父类的final方法,但不能覆盖它(重写)。

5 什么是 final 类

用final关键字声明的类称为final类,不能将final类作为子类。 这意味着最终类不能被任何类继承。

6 可以将构造器声明为 final 吗?

不可以,构造函数不能声明为final。 构造函数不会被继承,因此不能被覆盖,因此拥有最终的构造函数是没有用的。

7 如果final 修饰List/ArrayList

一旦创建了最终List / ArrayList,我们就可以从列表中添加或删除数据,但是不能为最终列表分配值。

import java.util.ArrayList;
import java.util.List;

public class FinalList
{
    public static void main(String[] args)
    {
        final List myList = new ArrayList();
        myList.add("one");
        myList.add("two");
        myList.add("three");
        
        System.out.println(myList);
        
        List tmp = new ArrayList();
        tmp.add("four");
        
        myList = tmp; // Throws Compilation error
        myList = null;
    }
}

当我们将tmp或null分配给myList时,将出现编译错误,例如“无法分配最终的局部变量myList”

8java中什么是final static 变量

将变量声明为静态最终变量后,该变量将变为常量。 仅存在一个变量副本,该副本不能被任何实例更改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值