• Java基础——final关键字


    🏡个人主页 :@ 守夜人st
    🚀系列专栏:Java
    …持续更新中敬请关注…
    🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点

    ✈️推荐一款模拟面试,刷题,从基础走向大场面试👉 开启你的刷题之路吧

    Java基础——final关键字

    在前面的学习过程中,为了声明常量使用过final关键字,在Java中final关键字的作用还有很多,final关键字能修饰变量、方法和类。

    final修饰变量

    final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和成员变量有所不同。

    1. final修饰的局部变量必须使用之前被赋值一次才能使用。

    2. final修饰的成员变量在声明时没有赋值的叫“空白final变量”。空白final变量必须在构造方法或

    静态代码块中初始化。

    final修饰变量示例代码如下:

    //FinalDemo.java文件
    package com.shouyerenst;
    class FinalDemo {
        void doSomething() {
        	// 没有在声明的同时赋值
    		final int e;// 只能赋值一次 
            e = 100;System.out.print(e);
            // 声明的同时赋值
            final int f = 200;}
        //实例常量
        final int a = 5; // 直接赋值④ 
        final int b; // 空白final变量 ⑤ 
        
        //静态常量
        final static int c = 12; // 直接赋值 ⑥
        final static int d; // 空白final变量 ⑦ 
        
        // 静态代码块
        static { 
        	// 初始化静态变量
            d = 32;}
        
        // 构造方法
        FinalDemo() {
            // 初始化实例变量
            b = 3;// 第二次赋值,会发生编译错误
                // b = 4; ⑩ 
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    上述代码第①行和第③行是声明局部常量,其中第①行只是声明没有赋值,但必须在使用之前赋值(见代码第②行),其实局部常量最好在声明的同时初始化。

    代码第④、⑤、⑥和⑦行都声明成员常量。代码第④和⑤行是实例常量,如果是空白final变量(见代码第⑤行),则需要在构造方法中初始化(见代码第⑨行)。代码第⑥和⑦行是静态常量,如果是空白final变量(见代码第⑦行),则需要在静态代码块中初始化(见代码第⑧行)。

    另外,无论是那种常量只能赋值一次,见代码第⑩行为b常量赋值,因为之前b已经赋值过一次,因此

    这里会发生编译错误。

    final修饰类

    final修饰的类不能被继承。有时出于设计安全的目的,不想让自己编写的类被别人继承,这时可以使用final关键字修饰父类。

    示例代码如下:

    //SuperClass.java文件
    package com.shouyerenst;
    final class SuperClass {
        
    }
    class SubClass extends SuperClass {
        //编译错误
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在声明SubClass类时会发生编译错误。

    final修饰方法

    final修饰的方法不能被子类覆盖。有时也是出于设计安全的目的,父类中的方法不想被别人覆盖,这是可以使用final关键字修饰父类中方法。

    示例代码如下:

    //SuperClass.java文件
    package com.shouyerenst;
    class SuperClass {
        final void doSomething() {
            System.out.println("in SuperClass.doSomething()");
        }
    }
    class SubClass extends SuperClass {
        @Override
        void doSomething() {//编译错误
            System.out.println("in SubClass.doSomething()");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    子类中的void doSomething()方法试图覆盖父类中void doSomething()方法,父类中的voiddoSomething()方法是final的,因此会发生编译错误。

    算法对程序员来说及其重要,语言和开发平台不断变化,但是万变不离其宗的是那些算法和理论,刷算法最最最直白的原因就是找一个好的工作,那刷题一定是必不可少的
    现在算法刷题平台还是蛮多的,给大家介绍一个我认为与大厂关联最深的平台——牛客网 跳转链接

    ​​在这里插入图片描述

    感觉不错的话,动手点个赞吧!

  • 相关阅读:
    Django--31Django知识体系梳理总结
    Spring Boot 统一功能处理
    RabbitMQ-高级篇-黑马程序员
    【服务器安装系列】CentOS7 安装及配置 Docker
    计算机毕业设计ssm大学生身心健康管理系统的设计与实现d223r系统+程序+源码+lw+远程部署
    聚观早报 |联想集团Q2财季业绩;小鹏汽车Q3营收
    windows socket网络编程--事件选择模型
    05.智慧商城——路由前置守卫、首页动态渲染
    智慧加油站AI智能视频分析系统
    2022杭电多校10(总结+补题)
  • 原文地址:https://blog.csdn.net/shouyeren_st/article/details/126428819