📜  java中static和final的区别(1)

📅  最后修改于: 2023-12-03 15:31:49.221000             🧑  作者: Mango

Java中static和final的区别

在Java中,static和final是两个常用的关键字。它们在不同的情况下有着不同的用法和含义。本文将会介绍这两个关键字的区别。

static

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

final是Java中的一个关键字,表示不可变的。它可以用来修饰类、变量和方法。

final变量

用final修饰的变量称为常量,一旦被赋值后就不能再次改变。在定义时必须赋初值,可以在静态块中赋值,但赋值后就不能再修改。

public class Test {
    public final int COUNT = 10;
    public static final double PI = 3.14;
}

final方法

用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类

用final修饰的类称为不可继承的类,不能被其他类继承。

public final class Test {
    // ...
}
public class SubTest extends Test { // 编译错误:Cannot inherit from final Test
    // ...
}
static和final的区别
  1. static修饰的成员属于类,final修饰的成员属于对象;
  2. static修饰的成员可以被修改,final修饰的成员不能被修改;
  3. static修饰的方法可以被子类重写,final修饰的方法不能被重写;
  4. static修饰的类可以被继承,final修饰的类不能被继承。