繁体   English   中英

Java中的最终和静态

[英]final and static in Java

我在一本书上看过这句话,但我不明白:

一个既是静态又是最终的字段只有一块不能改变的存储。

谁能为我解释一下?

您混淆的根源可能是英语中的“静态”一词和它在 Java 中的含义只是松散相关的。

以“正常”方式在类 Cat 中定义的变量可以称为实例变量。

class Cat {
   int weight;
}

每次创建 Cat 类型的新对象时,都会创建变量“weight”的新副本。 如果您创建 10 个 Cat 类型的对象,每个对象都有自己的权重变量副本。

一个“静态”变量可以被认为是一个类级别的变量,而不是一个实例变量。 静态变量只有一个副本并且属于 Cat 类本身,而不是每个Cat 类型的对象都有一个副本。

class Cat {
   static String speciesName;

   int weight;
}

在这里,无论我们创建了多少个 Cat 类型的对象,物种名称都只有一个副本。

如果静态变量也是“最终的”,那么这个变量的副本是唯一无法更改的存储。 如果上例中的变量“weight”是最终的,那么将有 10 个无法更改的存储空间——一个用于我们创建的 Cat 类型的每个对象。

static变量对于类的所有实例都是通用的。 final变量在第一次设置后不能更改。

所以Java中的static final变量对于类的所有实例都是通用的,并且在第一次设置后就无法更改。

class Car {

    static final int numberOfWheels = 4;
    Color color;

    public Car(Color color) {
        this.color = color;
    }
}

Car redCar = new Car(Red);
Car blueCar = new Car(Blue);

每辆车现在都有一个单独的可变属性color ,它们共享无法更改的属性numberOfWheels

  • final意味着不能为任何变量重新赋值
  • 静态意味着在所有方法的类中只能有一个完整的引用副本。

有关此页面上的解释,请参阅“常量”部分:

http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM