小编典典

静态和最终的区别?

all

我总是对 javastatic中的andfinal关键字感到困惑。 __

它们有何不同?


阅读 102

收藏
2022-07-17

共1个答案

小编典典

static关键字可用于4种场景

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

我们先来看看静态变量和静态方法。

静态变量

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

静态方法

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

静态类

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

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

Java 中没有顶级静态类。

边注:

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

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

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

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

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

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

当在方法体中定义匿名内部类时,在该final方法范围内声明的所有变量都可以从内部类中访问。一旦它被赋值,最终变量的值就不能改变。

2022-07-17