📅  最后修改于: 2023-12-03 15:31:49.221000             🧑  作者: Mango
在Java中,static和final是两个常用的关键字。它们在不同的情况下有着不同的用法和含义。本文将会介绍这两个关键字的区别。
static是Java中的一个关键字,表示静态的。它可以用来修饰类、方法和变量。
用static修饰的变量称为静态变量,也叫做类变量。静态变量与类相关联,不属于任何对象,不论创建多少个对象,静态变量只有一份。静态变量可以通过类名直接调用,也可以通过对象名来调用。
public class Test {
public static int COUNT = 0;
public Test() {
COUNT++;
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
System.out.println(Test.COUNT); // 2
}
}
用static修饰的方法称为静态方法。静态方法属于类,不属于对象。静态方法可以通过类名来调用,也可以通过对象名来调用。在静态方法中,不能直接访问非静态的成员变量和方法,只能访问静态的成员变量和方法。
public class Test {
public static void printCount() {
System.out.println(Test.COUNT);
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
Test.printCount(); // 2
}
}
静态代码块也称为静态初始化块,用来初始化类的静态变量。静态代码块在类加载时执行,并且只执行一次。
public class Test {
public static int COUNT;
static {
COUNT = 10;
}
}
final是Java中的一个关键字,表示不可变的。它可以用来修饰类、变量和方法。
用final修饰的变量称为常量,一旦被赋值后就不能再次改变。在定义时必须赋初值,可以在静态块中赋值,但赋值后就不能再修改。
public class Test {
public final int COUNT = 10;
public static final double PI = 3.14;
}
用final修饰的方法称为不可覆盖的方法,子类中不能重写它。
public class Test {
public final void print() {
System.out.println("hello");
}
}
public class SubTest extends Test {
// 编译错误:Cannot override the final method from Test
public void print() {
System.out.println("world");
}
}
用final修饰的类称为不可继承的类,不能被其他类继承。
public final class Test {
// ...
}
public class SubTest extends Test { // 编译错误:Cannot inherit from final Test
// ...
}