1.是什么
static
和 final
是 Java 中两个非常重要的关键字,它们各自有着独特的用途和含义,但也可以在某些情况下一起使用。下面我将详细解释这两个关键字的区别,并通过例子来加深理解。
static 关键字
static
关键字用于声明属于类本身而不是类的某个特定对象的字段(变量)或方法。这意味着,无论创建了多少个类的对象,static
字段或方法都只有一份拷贝,由所有对象共享。
-
用途:
- 静态字段:用于存储类的状态信息,这些信息不依赖于任何特定对象实例。
- 静态方法:通常用于执行与类相关的操作,而不是与类的任何特定实例相关的操作。静态方法不能访问类的非静态成员(除非通过对象实例)。
-
示例:
public class MyClass { // 静态字段 static int staticField = 42; // 静态方法 public static void staticMethod() { System.out.println("This is a static method."); } public static void main(String[] args) { // 不需要创建对象即可访问静态字段和方法 System.out.println(MyClass.staticField); // 输出 42 MyClass.staticMethod(); // 调用静态方法 } }
final 关键字
final
关键字用于表示一个值一旦被赋予之后就不能被改变(对于基本数据类型)或者一个对象的引用一旦指向某个对象之后就不能再指向其他对象(对于对象引用)。此外,final
还可以用来修饰类和方法,表示这些类或方法不能被继承或重写。
-
用途:
- 修饰变量:表示变量的值不可变。
- 修饰方法:表示该方法不能被子类重写。
- 修饰类:表示该类不能被继承。
-
示例:
public class MyClass { // final 修饰的变量,必须在声明时初始化或在构造器中初始化 final int finalField = 100; // final 修饰的方法,不能被子类重写 public final void finalMethod() { System.out.println("This is a final method."); } public static void main(String[] args) { MyClass obj = new MyClass(); // finalField 的值在初始化后不能改变 // obj.finalField = 200; // 这会编译错误 // 调用 final 方法 obj.finalMethod(); } }
static 和 final 的区别:
- 作用范围:
static
作用于类级别,表示属于类本身;final
作用于变量、方法或类,表示不可变性或不可继承性。 - 目的:
static
用于实现类级别的共享;final
用于保证值或行为的不变性。 - 使用场景:
static
常用于工具类中的方法或常量;final
常用于配置值、不可变对象或防止方法被重写。总结:
static关键字
- 修饰类:
static
关键字可以用来修饰类,表示该类是静态的,它不依赖于任何对象实例,可以直接通过类名访问。 - 修饰变量:
static
关键字可以用来修饰变量,表示该变量是类变量,属于类本身,而不是类的某个对象。类变量在内存中只存在一份,即使创建了类的多个对象,这些对象共享同一个类变量。 - 修饰方法:
static
关键字可以用来修饰方法,表示该方法是类方法,属于类本身,不是类的某个对象。类方法可以直接通过类名调用,无需创建类的实例。
final关键字
- 修饰类:
final
关键字可以用来修饰类,表示该类不能被继承。被声明为final
的类不能有子类。 - 修饰变量:
final
关键字可以用来修饰变量,表示该变量是一个常量,其值一旦被初始化,就不能被更改。 - 修饰方法:
final
关键字可以用来修饰方法,表示该方法不能被重写。被声明为final
的方法不能被子类覆盖。
好啦,今天的干货就到这啦~ 有什么疑问的小伙伴欢迎到评论区留言!