静态和最终之间的区别?
我总是在java中的关键字之间感到困惑。static
final
它们有何不同?
让我们先看一下静态变量和静态方法。
Class.variable
Class.methodName()
this
super
Java也有“静态嵌套类”。静态嵌套类只是一个不隐式引用外部类实例的类。
静态嵌套类可以具有实例方法和静态方法。
Java中没有顶级静态类这样的东西。
main 方法是因为它必须是可访问的,应用程序才能在任何实例化发生之前运行。
static
final
关键字在几个不同的上下文中用于定义以后无法更改的实体。类不能被子类化。这样做是出于安全性和效率的原因。因此,许多 Java 标准库类是 ,例如 和 。类中的所有方法都是隐式的 。final
final
java.lang.System
java.lang.String
final
final
方法不能被子类覆盖。这用于防止子类更改方法的意外行为,该方法可能对类的功能或一致性至关重要。final
一个变量只能通过初始值设定项或赋值语句初始化一次。它不需要在声明点初始化:这称为变量。类的空白最终实例变量必须在声明它的类的每个构造函数的末尾明确赋值;类似地,必须在声明它的类的静态初始值设定项中明确分配空白的最终静态变量;否则,在这两种情况下都会发生编译时错误。final
blank final
在方法主体中定义匿名内部类时,可以从内部类中访问在该方法的作用域中声明的所有变量。一旦赋值,最终变量的值就无法更改。final
static 意味着它属于类而不是实例,这意味着在特定类的所有实例之间只共享该变量/方法的一个副本。
public class MyClass {
public static int myVariable = 0;
}
//Now in some other code creating two instances of MyClass
//and altering the variable will affect all instances
MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();
MyClass.myVariable = 5; //This change is reflected in both instances
final是完全不相关的,它是一种定义一次初始化的方法。您可以在定义变量时进行初始化,也可以在构造函数中进行初始化,而在其他任何地方都无法进行。
注意关于最终方法和最终类的说明,这是一种明确声明方法或类不能分别覆盖/扩展的方法。
额外阅读因此,关于静态的话题,我们谈论的是它可能具有的其他用途,它有时用于静态块。使用静态变量时,有时需要在使用类之前设置这些变量,但不幸的是,您没有获得构造函数。这就是静态关键字的用武之地。
public class MyClass {
public static List<String> cars = new ArrayList<String>();
static {
cars.add("Ferrari");
cars.add("Scoda");
}
}
public class TestClass {
public static void main(String args[]) {
System.out.println(MyClass.cars.get(0)); //This will print Ferrari
}
}
您不能将此与实例初始值设定项块混淆,这些块在每个实例的构造函数之前调用。