当前位置:首页 > 科技  > 软件

揭秘Java三宝:final,static,volatile,面试中的关键字秘籍!

来源: 责编: 时间:2023-11-30 09:30:24 389观看
导读大家好,我是小米,一名热爱技术分享的程序员。最近在和小伙伴们聊天时,发现有不少小伙伴对于Java中的一些关键字,比如final,static,volatile等,还是感到有些懵懂。为了帮助大家更好地理解这些概念,今天我就来给大家详细解析一

UvC28资讯网——每日最新资讯28at.com

大家好,我是小米,一名热爱技术分享的程序员。最近在和小伙伴们聊天时,发现有不少小伙伴对于Java中的一些关键字,比如finalstaticvolatile等,还是感到有些懵懂。为了帮助大家更好地理解这些概念,今天我就来给大家详细解析一下这个面试经常被问到的题目:“final,static,volatile的作用分别是什么?”UvC28资讯网——每日最新资讯28at.com

final:终结无尽的更改

我们先来聊聊final关键字,这个关键字在Java中应用广泛,它主要用于声明不可变的类、方法和变量。那么,它的作用究竟是什么呢?UvC28资讯网——每日最新资讯28at.com

1.1 不可变的类

当我们使用final修饰一个类时,意味着这个类不能被继承,也就是说,它是一个终结类,不允许其他类再来继承它。这样做的好处是防止其他类修改或扩展该类,保护了类的完整性。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

1.2 不可变的方法

在方法级别,final关键字表示该方法不能被子类重写。这对于确保某些方法的逻辑不被修改是非常有用的,尤其是一些关键的算法或者安全性相关的方法。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

1.3 不可变的变量

在变量层面,final关键字用于声明常量,一旦被赋值,就无法再修改。这有助于提高代码的可读性和可维护性,同时也避免了一些潜在的bug。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

总的来说,final关键字的作用是为了让我们的代码更加稳定和可靠,避免不必要的修改和继承。当你看到某个类、方法或者变量被标记为final时,就知道它是不可变的,可以更加放心地使用。UvC28资讯网——每日最新资讯28at.com

static:不拘泥于实例,放眼整个类

接下来,我们聊聊static关键字。static的作用非常丰富,主要用于修饰类的成员,使其成为类级别的属性或方法。UvC28资讯网——每日最新资讯28at.com

2.1 类级别的属性

使用static修饰的成员变量,称之为类变量。这意味着不再属于实例,而是属于整个类。无论创建了多少个类的实例,它们都共享同一个类变量。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

上面的例子中,count是一个类变量,被两个实例共享。无论通过哪个实例进行递增,最终影响的都是同一个countUvC28资讯网——每日最新资讯28at.com

2.2 类级别的方法

在方法层面,使用static修饰的方法是类级别的方法,不依赖于类的实例而直接通过类名调用。常见的例子就是main方法。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

通过
StaticExample.staticMethod()
直接调用了类级别的静态方法,而无需创建类的实例。
UvC28资讯网——每日最新资讯28at.com

2.3 静态代码块

此外,static还可以用于静态代码块,它在类加载时执行,用于初始化类级别的资源。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

总的来说,static的作用是让某个成员不再依赖于类的实例,而是属于整个类。这使得我们可以通过类名直接访问这些成员,而不必先创建实例。UvC28资讯网——每日最新资讯28at.com

volatile:多线程时的变量同步保障

最后,我们来看看volatile关键字。volatile主要用于修饰变量,确保多线程情况下的可见性和有序性。UvC28资讯网——每日最新资讯28at.com

3.1 可见性

在多线程环境下,一个线程对共享变量的修改,其他线程并不一定能立即看到。而使用volatile修饰的变量,保证了当一个线程修改了该变量的值,其他线程能够立即看到最新的值。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

在上面的例子中,通过volatile关键字修饰的flag变量,保证了在一个线程调用setFlag()方法后,另一个线程调用checkFlag()方法能够立即得知flag已经变为trueUvC28资讯网——每日最新资讯28at.com

3.2 有序性

volatile还能够保证变量的有序性,防止指令重排序。在多线程环境下,由于指令重排序的存在,有时可能会导致意外的结果。而使用volatile关键字修饰的变量,可以避免这种情况。UvC28资讯网——每日最新资讯28at.com

UvC28资讯网——每日最新资讯28at.com

在上面的例子中,如果不使用volatile修饰xy,由于指令重排序的原因,可能会导致在read()方法中输出"重新排列!"。而使用volatile关键字修饰后,保证了写入操作的有序性,避免了这种情况。UvC28资讯网——每日最新资讯28at.com

总的来说,volatile关键字的作用是为了在多线程环境下保证变量的可见性和有序性,从而避免一些潜在的线程安全问题。UvC28资讯网——每日最新资讯28at.com

END

今天我们深入探讨了面试中经常被问到的问题:“final,static,volatile的作用分别是什么?”通过详细解析这三个关键字的使用场景和作用,相信大家对它们有了更深刻的理解。UvC28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35338-0.html揭秘Java三宝:final,static,volatile,面试中的关键字秘籍!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 揭秘Git高手的十个秘密武器:让你的工作效率飙升!

下一篇: 八股文-如何理解Java中的多态

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 三星获批量产iPhone 15全系屏幕:苹果史上最惊艳直屏

    按照惯例,苹果将继续在今年9月举办一年一度的秋季新品发布会,有传言称发布会将于9月12日举行,届时全新的iPhone 15系列将正式与大家见面,不出意外的话
Top