Java static关键字详解

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。

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java