一尘不染

静态和最终之间的区别?

java

我一直在 java中的staticfinal关键字之间感到困惑。 __

它们有何不同?


阅读 257

收藏
2020-09-09

共1个答案

一尘不染

static关键字可以在4种情况下使用

  • 静态变量
  • 静态方法
  • 静态代码块
  • 静态嵌套类

首先让我们看一下静态变量和静态方法。

静态变量

  • 它是一个属于类而不属于对象(实例)的变量。
  • 静态变量在执行开始时仅初始化一次。在初始化任何实例变量之前,将首先初始化这些变量。
  • 该类的所有实例共享的单个副本。
  • 静态变量可以通过类名直接访问,不需要任何对象。
  • 句法: Class.variable

静态方法

  • 它是属于类而不属于对象(实例)的方法。
  • 静态方法只能访问静态数据。除非具有/创建该类的实例,否则它不能访问非静态数据(实例变量)。
  • 静态方法只能调用其他静态方法,而不能从其调用非静态方法,除非它具有/创建了该类的实例。
  • 静态方法可以通过类名直接访问,不需要任何对象。
  • 句法: Class.methodName()
  • 静态方法无论如何都不能引用thissuper关键字。

静态类

Java还具有“静态嵌套类”。静态嵌套类只是一个没有隐式引用外部类实例的类。

静态嵌套类可以具有实例方法和静态方法。

Java中没有顶级静态类。

边注:

主要方法是static因为在进行任何实例化之前,应用程序必须可以访问它才能运行。

final 关键字在几种不同的上下文中用于定义一个实体,以后不能更改它。

  • 一个final类不能被子类化。这样做是出于安全和效率的考虑。因此,许多Java标准库类是final,例如java.lang.Systemjava.lang.Stringfinal类中的所有方法都是隐式的final

  • final方法不能由子类覆盖。这用于防止子类的意外行为更改可能对类的功能或一致性至关重要的方法。

  • 一个final变量只能要么通过初始化或赋值语句初始化一次。它不需要在声明时进行初始化:这称为blank final变量。必须在声明该类的每个构造函数的末尾明确分配该类的空白最终实例变量;类似地,必须在声明它的类的静态初始化器中明确分配一个空白的最终静态变量;否则,两种情况下都会发生编译时错误。

注意:如果变量是引用,则意味着不能将变量重新绑定为引用另一个对象。但是,如果它最初是可变的,它引用的对象仍然是可变的。

在方法的主体中定义匿名内部类final时,可以从内部类中访问在该方法范围内声明的所有变量。赋值后,最终变量的值将无法更改。

2020-09-09