在数学和科学中,常数是一个表示特定值的术语,例如“π”,它是数字3.14159的实用名称。 Java具有其常量。这些变量在(a)下不属于任何对象,并且(b)子集一旦设置,就不会更改其值。变量声明中的静态单词表明该变量不属于任何对象。有一个类似的关键字表示变量值将仅设置一次,并且不会更改。这是关键字final。此关键字不仅限于静态变量,还可以与实例变量,局部变量甚至是作为参数方法的变量一起使用。通过将变量声明为final,可以向所有人表明存在期间的变量将具有相同的值。更重要的是,编译器将检测到每次尝试更改这样声明的变量的值并将其报告为错误。对于Java术语,声明为staticfinal的变量称为常量。

什么是final?

final修饰符可以在Java编程语言中的多个地方使用。 在这里,我们将介绍其最常见的用法。 final修饰符可以应用于局部变量,函数参数以及非静态或静态成员变量的声明。 在这种情况下,变量修饰符将转换为常量。 翻译语言翻译器将检查是否有某些代码正在尝试修改该值,并且这些尝试将被标记为错误。 下面是一个例子。

final int value = 17;

带有此修饰符的静态成员变量用作全局常量; 例如,在java.lang.Math变量PI中,它的确切声明是:

public static final double PI = 3.14159265358979323846;

我们可以将final修饰符应用于函数的声明。 标有final的功能不能再被推翻,即其最终实现。 抽象方法不能声明为最终方法–抽象的事实意味着它们缺乏实现; 这肯定不是他们的最终状态。 这是一个例子。

public final int meaningLife () {
    return 42;
}

我们可以将final修饰符应用于类声明。 标有final的类不能再继承-这是其最终实现。 显然,抽象类不能同时是最终的。 这是一个例子:

public final class Closed {

// …

}

final类的示例之一是java.lang.String类-它是final类,因此没有人可以继承它,因此可以访问其成员变量。

什么是静态/static?

静态/static变量不属于类的特定实例。静态变量属于类本身,并且在内存中只有一个位置,而不管在内存中创建的该类的副本数量如何。非静态变量属于类样本–类的每个实例都有自己的此类变量副本。静态变量属于类-内存中的类保留此类变量的值;因此,所有示例类都具有相同的内容,因此我们可以考虑在所有类大小之间共享静态变量。通过更新value变量,新值将对该类的所有实例自动可见。静态过滤器可以应用于在类中合法声明的任何元素。对于成员变量,结果是此类成员变量将仅存储在一个位置的内存中。如果是方法会怎样?通过将方法声明为静态,消息是相同的:相关的方法不属于类的类,而是属于类本身。因此,静态方法不会在调用时收到对其进行调用的对象的隐藏引用。在静态引用方法中,此功能不可用。确实,跨对象调用静态方法与通过引用此引用访问静态成员变量同样令人困惑:在两种情况下,最好简单地编写类的名称,点和调用方法的名称。

final和static的区别

  1. 变量
    静态表示在实例化给定类的所有对象中通用的变量,而final定义了常量。

  2. 方法
    静态是给定类的每个对象都相同的方法-也称为类成员,例如类中的main方法。 不能在继承的类中处理final方法。


  3. final不能扩展,即不允许子类。 静态不适用于类。


  4. 简而言之,final表示该值不能更改(覆盖)。 静态值设置为其默认值,但可以重新初始化。

总结

即使没有对象(实例),静态也可以提供访问权限。 突出的类通过关键字static声明。 如果不希望稍后在程序中进行某些更改,或者希望编译器进行检查和禁止,则可以将promise更改为final。静态块可以用于初始化。 用于初始化的静态块在方括号前面声明为static。 这种类的块在类读取期间执行一次,通常会初始化类的静态成员。

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:final和static
本文链接:https://www.vsdiffer.com/vs/final-vs-static.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。