static和final在Java中都是用于修饰类、方法、变量等的修饰符,但它们各自有不同的作用和含义。以下是关于static与final修饰后的主要区别:
一、static修饰符
含义:
static是静态修饰符,表示所修饰的成员(变量、方法、代码块)属于类级别,而非实例级别。
作用:
静态变量:static修饰的变量是静态变量,也称为类变量。无论创建多少个类的实例,静态变量都只有一份拷贝,它们存储在JVM的方法区中,随着类的加载而加载,随着类的消失而消失。
静态方法:static修饰的方法是静态方法,可以通过类名直接调用,无需创建类的实例。静态方法只能访问静态成员(静态变量和静态方法),不能访问非静态成员(实例变量和实例方法)。
静态代码块:static修饰的代码块是静态代码块,它在类加载时执行一次,常用于初始化静态变量或执行一些只需要执行一次的代码。
访问方式:
静态成员可以通过类名直接访问,也可以通过对象访问,但推荐使用类名访问,以体现其类级别的特性。
二、final修饰符
含义:
final表示不可改变的最终形态,用于修饰类、方法、变量等。
作用:
final修饰类:表示该类不能被继承,即不能有子类。
final修饰方法:表示该方法不能被重写,子类继承该方法时只能使用,不能覆盖(重写)。
final修饰变量:表示该变量的值不可改变。对于基本数据类型,final修饰的变量就是常量,只能赋值一次;对于引用类型,final修饰的变量所引用的对象不能改变,但对象的内容可以改变。
使用注意事项:
final修饰的局部变量必须在使用之前赋值一次才可以使用。
final修饰的成员变量在声明时没有赋值的叫做“空白final变量”,必须在构造方法或静态代码块中初始化。
归纳:
static修饰的成员属于类级别,随着类的加载而加载,可以通过类名直接访问,主要用于实现共享数据和工具方法等。
final修饰的成员表示不可改变,用于确保类、方法、变量的最终性,避免被继承、重写或修改。
static和final在Java中各自扮演着不同的角色,可以根据具体需求选择使用。同时,它们也可以组合使用,如static final修饰的变量表示一旦给值就不可修改,且可以通过类名直接访问。