最终和静态

Anonim

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

什么是最终的?

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

final int value = 17;

具有此修饰符的静态成员变量用作全局常量;例如,在java.lang.Math变量PI中,它是完全陈述的

public static final double PI = 3.14159265358979323846;

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

public final int meaningLife(){

返回42;

}

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

公共决赛班关闭{

// …

}

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

什么是静电?

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

最终和静态之间的差异

  1. 变量

静态代表变量,该变量对于实例化给定类的所有对象是通用的,而最终定义常量。

  1. 方法

静态是给定类的每个对象相同的方法 - 也称为类成员,例如这是主要方法。无法在继承的类中处理最终方法。

最终不能扩展,即不允许子类。静态不适用于类。

简单地说,最后表示该值不能改变(覆盖)。静态值设置为其默认值,但可以重新初始化。

最终与静态:比较图表

最终和静态总结

  • 即使没有对象(实例),关键工作static也提供访问。突出的类通过关键词static声明。如果您不想在程序中稍后更改某些更改的值,或者您希望编译器检查并禁止,则可以将该承诺更改为final。初始化有一个静态块。初始化的静态块在括号前面声明为键静态。在类读取期间,这种块执行一次,并且它通常初始化类的静态成员。