摘要: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….
点击关注,第一工夫理解华为云陈腐技术~