Java基础——final关键字

人生之路不会是一帆风顺的,我们会遇上顺境,也会遇上逆境,在所有成功路上折磨你的,背后都隐藏着激励你奋发向上的动机,人生没有如果,只有后果与结果,成熟,就是用微笑来面对一切小事。

导读:本篇文章讲解 Java基础——final关键字,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

🏡个人主页 :@ 守夜人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; ⑩ 
    }
}

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

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

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

这里会发生编译错误。

final修饰类

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

示例代码如下:

//SuperClass.java文件
package com.shouyerenst;
final class SuperClass {
    
}
class SubClass extends SuperClass {
    //编译错误
}

在声明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()");
    }
}

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

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

​​在这里插入图片描述


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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/125489.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!