摘要:static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要。

本文分享自华为云社区《Java: static关键字与final关键字》,原文作者:唐里 。

static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要。

静态变量

无论你写了一个多大的程序,都会遇到static关键字,像这样,在main()方法里:

简而言之,带有 static 关键字的字段属于类,它们是类方法和变量。

当你在课堂上或者书本上学习面向对象编程时,可能会碰到类似于蓝图的东西。我们做个类比,有一个房子的蓝图( 这个蓝图可以建很多房子,就像你可以用这个类创建很多对象/实例一样) ,在这个蓝图上,可能有描述蓝图本身而不是房子的信息。因此,如果一个类中有一个静态变量,那么该变量将保存有关该类本身的信息。我希望这个类比可以使你更容易理解,如果不能,看看下面的例子:

没有关键字 static 的变量称为实例变量,因此 userName 变量被认为是 User 类的实例变量。

现在,我们的main()方法是:

注意设置实例变量“用户名”和静态变量描述的区别。当我们设置实例变量“用户名”时,我们首先创建 User 类的对象/实例,然后设置它的 userName 变量。为了设置静态变量‘ description’,我们通过‘ User.setDescription (“ My User Class”) ;’在类本身上设置它。因此,通过将“ description”变量设置为 static,每个类只有一个这样的字段,而有许多“ userName”字段(每个创建的对象有一个)。

它是如何起作用的?实际上,类变量的一个实际用途是不停计算我们拥有的类的实例数。例如:

我们在 User 类中添加了一个‘ count’静态变量,并在构造函数中增量它。每次我们创建 User 类的实例时,都会有一个变量来跟踪创建了多少个实例。

最后要注意的是,静态变量不是用值初始化的,它们是用默认值“自动”初始化的,默认值是:

primitive integers(long, short etc): 0
primitive floating points(float, double): 0.0
boolean: false
object references: null

0 primitive floating points (float,double) : 0.0 boolean: false object references: null

静态方法

静态方法属于类方法。需要注意的一件重要事情是,静态方法不能访问实例变量; 它们只能访问其他静态字段。如果你试图通过一个实例方法访问一个静态字段,不要担心,编译器会通过一个报错提醒你:

non-static variable this cannot be referenced from a static context

这是因为实例变量在实例初始化之前不存在;而静态变量是在类中声明时创建的。另一方面,实例方法可以访问静态变量。

可访问性: 只有当静态字段或方法仅供类内使用时,才能将其标记为 private。如果要在类之外使用它们,那么它们必须被标记为 protected 或 public。

final关键字

简单来说,final 关键字就是 Java 将变量标记为常量的版本。Final 关键字可以防止变量被重新分配一个不同的值,因此一旦分配了一个值,就不能将其重新分配给其他变量。当你声明一个变量并给它贴上最终的标签时,它也必须被初始化。

编码规范:在 Java 中,和许多其他语言一样,常量总是全部大写。举个例子, π (表示圆周长与其直径的比值),如果你写成PI将导致以下错误:

java: cannot assign a value to final variable PI

在 Math 类中,PI 变量被标记为 final 关键字成为常量,而带有 final 关键字的变量不能被重新赋值。在methods上使用 final 关键字可以防止它们被重写,并在类级别上使用 final 关键字可以防止该类拥有子类(其他类不能从具有 final 关键字的类继承)。

以上就是本文的全部内容,希望对你有所帮助。

原文链接:https://suprun-anton6.medium.com/java-static-and-final-keywords-66a3f8b3db8a

点击关注,第一时间了解华为云新鲜技术~

详解Java中static关键字和final关键字的功能相关推荐

  1. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  2. Java中static的作用详解_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  3. java中static修饰函数_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  4. 详解java中的final关键字

    概述 final 简介 final关键字可用于多个场景,且在不同场景具有不同的作用.首先,final是一个非访问修饰符,仅适用于变量,方法或类.下面是使用final的不同场景: 上面这张图可以概括成: ...

  5. java static 函数_详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资 ...

  6. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题

    先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并 ...

  7. Java implement意思_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 发布于 2020-4-14| 复制链接 摘记: 详解JAVA中implement和extends的区别extends是继承父类,只要那个类不是声 ...

  8. java中implement_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实 ...

  9. java lock unlock_详解Java中的ReentrantLock锁

    ReentrantLock锁 ReentrantLock是Java中常用的锁,属于乐观锁类型,多线程并发情况下.能保证共享数据安全性,线程间有序性 ReentrantLock通过原子操作和阻塞实现锁原 ...

最新文章

  1. Error in value[[3L]](cond) : You have a 32-bit version of Java. H2O works best with 64-bit Java.
  2. apache 不执行PHP,显示代码
  3. Python 基础篇-简单的异常捕获
  4. Android Studio 3.3 Beta提供了新的Android代码压缩器R8
  5. SAP BTP SDK for Android 已经支持 Kotlin 了
  6. 15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
  7. 专访阿里云总裁王文彬:做出“用得爽”的工程产品
  8. Hadoop--Yarn常用命令 与 生产环境核心配置参数
  9. (C#)xml的简单理解创建和读取
  10. L1-041 寻找250-PAT团体程序设计天梯赛GPLT
  11. IIS 7.5 URL重写参数
  12. 4. PDO 事务处理
  13. 面向面试编程-概念之-分布式与集群的区别和联系
  14. Google Colab使用笔记
  15. 整合营销中广告投放策略,为何需要选择公关广告?
  16. 跨过野蛮生长的直播电商下一步该走向何方?
  17. 简易开发的百度地图API
  18. 北伦敦德比桑切斯为枪手扳平比分
  19. 7474触发器 异步三进制加法计数器
  20. R语言——单位根检验/平稳性检验

热门文章

  1. 对任意长度字符串,删除其中的任意的N(N=0)个字符
  2. Bootstrap 分页导航
  3. keil c语言绝对值函数,keil编写C程序是不是不能在函数内定义变量啊,求大神
  4. dw2019连接mysql数据库_Dreamweaver 8.0连接Mysql数据库全攻略
  5. 扫描代码重大漏洞 java_超过 75% 的开源软件安全漏洞存在于间接依赖中 | Linux 中国...
  6. 阿里云服务器内核编译升级
  7. 支付宝手机网站支付(基于Java实现支付宝手机网站支付)
  8. 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route
  9. OpenDayLight Helium实验一 OpenDaylight的C/S模式实验
  10. Nginx反向代理之HTTP 请求头中的 X-Forwarded-For